OVH Cloud OVH Cloud

[1/2HS] Mysql et le symbole Euro =?utf-8?q?=E2=82=AC?=

19 réponses
Avatar
ajh-valmer
Bonjour,

Depuis peu, lorsque j'INSERT ou UPDATE une table MySQL,
via scripts PHP et SQL, je mets le montant : "30€"
et apparait dans le champ via phpmyadmin : "30=C2=A4".
Pareil si j'=C3=A9cris "30=E2=82=AC".

Pourtant, si j'interroge la table (SELECT),
apparait bien dans le navigateur "30=E2=82=AC".

L'interclassement est UTF8_general_ci.
Si je mets : latin1_general_ci, pareil.

Ce probl=C3=A8me fait suite =C3=A0 un upgrade de mysql.

Merci,

A. Valmer

10 réponses

1 2
Avatar
ajh-valmer
On Monday 03 February 2020 19:16:54 G2PC wrote:
Et si tu fais une requête de sélection avec le terminal,
ça retourne quoi comme réponse ? :
2020 : 20€ alors qu'avec phpmyadmin = 2020 : 20¤

Étrange, PhpMyAdmin devrait prendre en charge UTF-8.
Et ta page web elle affiche le même symbole, et, elle est en UTF-8 ?

Si je mets UTF-8, j'ai "2020 : 20?"
Sinon, ma page est en iso-8859-15.
Après, tu peux voir à contourner le problème, si tu ne l'i dentifies pas :
Encodage Html Entité Héxadécimal € | €
Encodage Html Entité Décimal € | €
Code ASCII
<https://outils-javascript.aliasdmc.fr/encodage-caracteres-monetaires/enco de-caractere-20AC-html-css-js-autre.html#ascii>
ou entité Html &euro; | €
Encodage pour l'Url UTF-8 %E2%82%AC | €
Avatar
ajh.valmer
On Tuesday 04 February 2020 05:34:20 G2PC wrote:
D'après ce que tu écris, PHPMyAdmin retournerait le symbole en tant que
ISO 8859-1 ? https://fr.wikipedia.org/wiki/ISO/CEI_8859-15

Page Web de mon site, code PHP :
echo mb_internal_encoding();
UTF-8
Merci pour tous ces commentaires + liens.
Avant "&euro;" m'affichait bien €
Pourquoi plus maintenant ?
J'ai bien essayé :
Si UTF-8 = "?"
Si ISO 8859-1(5)= "¤".
Et pourquoi si champ phpmyadmin = 30¤ (et pas &euro;)
mon site affiche correctement 30 € ?
Et mysql en mode console, champ = 30 €
Lorsque je fais un update ou insert sql,
cotisation='30 &euro;' qui devient sous phpmyadmin : 30¤
Serait-ce phpmyadmin ?
Bonne soirée,
Lire :
https://openclassrooms.com/forum/sujet/afficher-le-symbole-euro-present-da ns-une-base-de-donnees-52071
https://forum.phpfrance.com/php-debutant/stocker-sigle-symbole-euro-dans-t able-sql-t269428.html
En conclure qu'il faut vérifier l'encodage :
1- De ton fichier
2- De ta base/table
3- De ta connexion PHP car tu peux forcer l'encodage lors de la connexion
Ta BDD utilise quel encodage ? Le meilleur moyen de le savoir ou de s'en
assurer, c'est de faire un dump d'une ligne qui a un symbole euro dans
un fichier et d'ouvrir ce fichier avec un editeur hexa pour voir si
c'est bien de l'UTF-8 (sequence UTF-8: E2 82 AC ).
Je dis UTF8 car il serait préférable d'être en UTF8, puisq ue c'est la
norme à suivre d'après le W3C, et, qui permet justement de stan dardiser
ce type de problématiques de caractères spéciaux.
En gros, ça se rapproche avec ça :

https://www.developpez.net/forums/d606691/php/php-base-donnees/encodage-car acteres-sigle/
https://openclassrooms.com/forum/sujet/signe-euro-avec-utf8decode-79959
Bref, assures toi déjà de connaître l'encodage de ta base de données,
et, de ton fichier.
Si tu as quelque chose qui n'est pas en UTF8, demande toi si il ne
serait pas mieux de passer à l'UTF8.
Une fois en UTF8, et, les problèmes d'accents réglés, le e uro devrait
passer sans aucun problème.
Pense à bien sauvegarder les données, et BDD, avant de commence r à faire
des conversions, au risque de tout casser.
Avatar
G2PC
Page Web de mon site, code PHP :
echo mb_internal_encoding();
UTF-8
Merci pour tous ces commentaires + liens.
Avant "&euro;" m'affichait bien €
Pourquoi plus maintenant ?
J'ai bien essayé :
Si UTF-8 = "?"
Si ISO 8859-1(5)= "¤".
Et pourquoi si champ phpmyadmin = 30¤ (et pas &euro;)
mon site affiche correctement 30 € ?
Et mysql en mode console, champ = 30 €
Lorsque je fais un update ou insert sql,
cotisation='30 &euro;' qui devient sous phpmyadmin : 30¤
Serait-ce phpmyadmin ?
Bonne soirée,

Tu as omis de vérifier la structure de ta base de données, tu peux faire
un export de la structure ?
De la table concernée au moins ?
Vérifie l'encodage de la table et de la colonne, ça donne quoi ?
Avatar
Jean-Michel OLTRA
Bonjour,
Le dimanche 09 février 2020, Erwann Le Bras a écrit...
on ne mets jamais l'unité dans une base de données...
on inscrit simplement les montants en base, c'est à la présentation des
données qu'on rajoute l'unité, ce qui permet de les manipuler comme on veut.

Tu peux la mettre dans une colonne à part, ou via un id dans une table
séparée. C'est quand même préférable de savoir dans quelle unité fut
enregistré ledit montant.
--
jm
Avatar
Erwann Le Bras
Le 09/02/2020 à 12:32, Jean-Michel OLTRA a écrit :
Bonjour,
Le dimanche 09 février 2020, Erwann Le Bras a écrit...
on ne mets jamais l'unité dans une base de données...
on inscrit simplement les montants en base, c'est à la présentation des
données qu'on rajoute l'unité, ce qui permet de les manipuler comme on veut.

Tu peux la mettre dans une colonne à part, ou via un id dans une table
séparée. C'est quand même préférable de savoir dans quelle unité fut
enregistré ledit montant.

Tout-a-fait.
Il y a même deux écoles : soit tout est renseigné dans la même monnaie
dans la base et converti à l'utilisation, soit la devise est précisée
avec le montant. Dans ce cas on préfère utiliser le code ISO 4217 de la
monnaie (EUR pour Euro, USD pour Dollar US) plutôt qu'un code de
caractère (€, $) qui va varier selon l'encodage retenu.
Codes ISO 4217 : https://fr.wikipedia.org/wiki/ISO_4217,
https://www.iso.org/fr/iso-4217-currency-codes.html
cordialement
Avatar
Erwann Le Bras
Le 24/02/2020 à 11:18, ajh-valmer a écrit :
On Monday 24 February 2020 10:45:32 Erwann Le Bras wrote:
Tout-a-fait.
Il y a même deux écoles : soit tout est renseigné dans la même monnaie
dans la base et converti à l'utilisation, soit la devise est précisée
avec le montant. Dans ce cas on préfère utiliser le code ISO 4217 de la
monnaie (EUR pour Euro, USD pour Dollar US) plutôt qu'un code de
caractère (€, $) qui va varier selon l'encodage retenu.
Codes ISO 4217 : https://fr.wikipedia.org/wiki/ISO_4217,
https://www.iso.org/fr/iso-4217-currency-codes.html

C'est un champ qui n'a pas à être manipulé,
de type caractères "varchar", contenant un nombre, suivis d'un espace
et de &euro; (soit p. ex. "20 &euro;").
C'est lors de l'update du champ que les caractères &euro;
se transforment en ce caractère : ¤ et pourquoi ?
Ce n'est pas un champ de type "INT" (integer, entier).
La table comporte un autre champ "montant" qui ne contient
qu'un nombre INT (p. ex. "20"), pour les manipulations (calculs).
Bonne journée.

Je pense sérieusement pour un problème d'encodage.
Mais je pense qu'à la base il ya un problème de définition du shéma de
la base :
d'après ce que j'ai compris, il y a une table avec un montant au format
"varchar" et le même montant au format "int"
il n'est pas bon d'avoir deux fois la même info stockée en base, l'info
pouvant se désynchroniser entre les deux champs.
Avatar
Jean-Michel OLTRA
Bonjour,
Le mercredi 26 février 2020, ajh-valmer a écrit...
En fait non, car l'une est un champ d'infos de caractères varchar,
et le mot &euro; ne devrait pas poser problème,
c'est juste un champ d'informations.
À moins de mettre à la place "euro"... est-ce le & et ; qui dérangent ?
Pourquoi lors de l'update &euro; devient ¤ ?

Il me semble que le fil portait au départ sur l'affichage sous Phpmyadmin.
Non ?
As tu essayé de voir le code source de la page de phpmyadmin pour voir ce
u'il y a dedans ? D'afficher le symbole euro € dans ta page phpmyadmin ?
Voire d'autres symboles html ?
--
jm
Avatar
ajh-valmer
On Wednesday 26 February 2020 15:12:53 Jean-Michel OLTRA wrote:
Il me semble que le fil portait au départ sur l'affichage sous Phpmy admin.
Non ? :

Oui.
As tu essayé de voir le code source de la page de phpmyadmin pour vo ir ce
u'il y a dedans ? D'afficher le symbole euro € dans ta page phpmy admin ?
Voire d'autres symboles html ?

Le code source de la page phpmyadmin n'affiche pas cette information.
Il s'agit de l'ASCII étendu :
164 ¤ &#164;
(un cercle avec 4 barres réparti à l'extérieur du cercle).
Les caractères &euro; deviennent ¤ après un update.
Par contre, si la page Web (pas phpmyadmin) affiche l'information du champ,
le symbole € apparait très bien.
Si j'update avec &euro; , € , &#164; pareil, phpmyadmin affiche ¤
Pour savoir :
apt-get update
apt-get purge phpmyadmin
apt-get install phpmyadmin
va t-il effacer mes bases de données Mysql ?
Mieux vaut être prudent :-)
Avatar
Jean-Michel OLTRA
Bonjour,
Le mercredi 26 février 2020, ajh-valmer a écrit...
As tu essayé de voir le code source de la page de phpmyadmin pour voir ce
u'il y a dedans ? D'afficher le symbole euro € dans ta page phpmyadmin ?
Voire d'autres symboles html ?

Le code source de la page phpmyadmin n'affiche pas cette information.

Non ? Avec le débugueur html du navigateur ?
Les caractères &euro; deviennent ¤ après un update.
Par contre, si la page Web (pas phpmyadmin) affiche l'information du champ,
le symbole € apparait très bien.

Il n'y a pas une option de configuration de phpmyadmin concernant l'encodage
des données et/ou des pages ouèbe ?
--
jm
Avatar
ajh-valmer
On Wednesday 26 February 2020 17:37:35 Jean-Michel OLTRA wrote:
Le code source de la page phpmyadmin n'affiche pas cette information.

Non ? Avec le débugueur html du navigateur ?
Il n'y a pas une option de configuration de phpmyadmin concernant l'encod age
des données et/ou des pages ouèbe ?

J'y suis arrivé,
voici ce qu'affiche le code source phpmyadmin du symbole euro dans le champ
concerné : &amp;euro;
(ajout de "amp;" entre "&" et "euro;").
Excuses, je réitère ma question :
apt-get update
apt-get purge phpmyadmin
apt-get install phpmyadmin
va t-il effacer mes bases de données Mysql ?
Mieux vaut être prudent :-)
1 2