[mysql] UTF-8 :(

UTF-8 :( [mysql] - SQL/NoSQL - Programmation

Marsh Posté le 29-05-2007 à 16:02:19    

Hello
 
Voila je veux transformer ma base d'ISO-machin en UTF-8.
 
J'ai donc :
- sauvegardé la base dans un fichier bdd.sql en spécifiant un encodage utf8 (vérif éditeur hexadecimal -> ca a marché)
- modifié le charset par défaut de chaque table dans ce fichier vers utf8
- créé une nouvelle base avec comme charset défaut utf8
- importé le fichier bdd.sql dans cette nouvelle table
 
Ayant fouillé dans les fichiers de la base (dans var/lib/mysql/), il semblerait que tout soit bien encodé en utf-8.
 
Seulement voila : quand je fais un SELECT via php, il me retourne des "?" à la place des "é", etc :(
(le charset de la page est utf-8)
 
Comme si la base était encodée en ISO quoi...
 
Pourquoi ça et comment remédier [:petrus dei]


---------------
Contes de fées en yaourt --- --- zed, souviens-toi de ma dernière lettre. --- Rate ta musique
Reply

Marsh Posté le 29-05-2007 à 16:02:19   

Reply

Marsh Posté le 29-05-2007 à 16:03:35    

Oublie pas un

Code :
  1. mysql_query('SET NAMES utf8');


Juste après la connexion

Reply

Marsh Posté le 29-05-2007 à 16:04:52    

FlorentG a écrit :

Oublie pas un

Code :
  1. mysql_query('SET NAMES utf8');


Juste après la connexion


Ca fait quoi ça ? Pas moyen de le configurer automatiquement ?


---------------
Contes de fées en yaourt --- --- zed, souviens-toi de ma dernière lettre. --- Rate ta musique
Reply

Marsh Posté le 29-05-2007 à 16:05:32    

Je sais pas en fait...

Reply

Marsh Posté le 29-05-2007 à 16:09:42    

En tout cas ça marche nickel merci bien [:smileysex]

 

http://dev.mysql.com/doc/refman/5. [...] ction.html

Citation :

SET NAMES indique ce qui est dans la commande SQL que le client envoie. Par conséquent, SET NAMES cp1251 indique au serveur : ``les futurs messages fournis par ce client seront dans le jeu de caractères cp1251'' et le serveur est libre de les traduire dans son propre jeu de caractères, éventuellement.


lapin :heink: ça devrait pas changer les données reçues selon cette définiton :/


Message édité par theredled le 29-05-2007 à 16:12:43

---------------
Contes de fées en yaourt --- --- zed, souviens-toi de ma dernière lettre. --- Rate ta musique
Reply

Marsh Posté le 29-05-2007 à 16:15:43    

Version française = caca :

Citation :

SET NAMES indicates what character set the client will use to send SQL statements to the server. Thus, SET NAMES 'cp1251' tells the server “future incoming messages from this client are in character set cp1251.” It also specifies the character set that the server should use for sending results back to the client. (For example, it indicates what character set to use for column values if you use a SELECT  statement.)

Reply

Marsh Posté le 29-05-2007 à 16:18:51    

Effectivement c'est mieux :D

 


Le pire c'est que ce truc fait marcher nickel mon site codé/affichant en utf-8 en gardant ma base en ISO :ouch:

 

edit : ouais en fait c'est tout à fait normal :o mais c'est tout aussi génial :o


Message édité par theredled le 29-05-2007 à 16:19:51

---------------
Contes de fées en yaourt --- --- zed, souviens-toi de ma dernière lettre. --- Rate ta musique
Reply

Marsh Posté le 29-05-2007 à 16:19:11    

Par défaut les connexion mysql sont en ISO, donc mysql croit que tu demandes des données en ISO. Comme il est gentil et intelligent, il converti les données avant de te les envoyer pour que tu n'es pas de problème. Pareil quand c'est toi qui lui envoit des données, il va supposer que tu les envois en ISO, et donc les convertir.
 
Si tu les veux en UTF-8, il faut le lui dire, soit avec SET NAMES, soit dans le fichier de config global ou local.


---------------
When it's from Finland it's good.  - Mon blog
Reply

Marsh Posté le 11-06-2007 à 19:05:31    

Salut
 
Theredled, je voudrais savoir si c'est nécessaire de convertir sa base en UTF-8 si tu dis qu'on peux la garder en ISO et afficher des choses en UTF-8 ?
J'imagine que pour stocker des données en UTF-8 il faut que la base soit elle même en UTF-8.
Comment se comporte PHP vis-à-vis d'une telle base ? Doit-on utiliser les fonctions encode/decode ?
 
Pourrais-tu m'indiquer également quelle version de MySQL tu utilises.
Est-ce que la version 4.0.15 supporte l'UTF-8 ?
 
Dernière chose, pourrais-tu m'indiquer comment modifier le charset de chaque table ?
Cette opération est nécessaire pour pouvoir convertir le contenu d'une ancienne table ISO en UTF-8 ?
 
Merci de ton aide

Reply

Marsh Posté le 11-06-2007 à 20:42:37    

flexx35 a écrit :

Salut

 

Theredled, je voudrais savoir si c'est nécessaire de convertir sa base en UTF-8 si tu dis qu'on peux la garder en ISO et afficher des choses en UTF-8 ?
J'imagine que pour stocker des données en UTF-8 il faut que la base soit elle même en UTF-8.
Comment se comporte PHP vis-à-vis d'une telle base ? Doit-on utiliser les fonctions encode/decode ?

 

Pourrais-tu m'indiquer également quelle version de MySQL tu utilises.
Est-ce que la version 4.0.15 supporte l'UTF-8 ?

 

Dernière chose, pourrais-tu m'indiquer comment modifier le charset de chaque table ?
Cette opération est nécessaire pour pouvoir convertir le contenu d'une ancienne table ISO en UTF-8 ?

 

Merci de ton aide


Ben écoute, en l'occurence, j'ai laissé ma table en ISO donc je suis pas le mieux expérimenté pour ce qui est de la migration de base vers UTF-8 :D

 

Pour ce qui est de la cohabitation BDD en ISO/code en UTF-8, en lui donnant un "SET NAMES 'UTF-8'" elle prend ce qui lui arrive, le lit comme de l'utf-8, et le retranscrit en ISO ; donc tu lui donnes un caractère chinois par exemple, elle ne pourra pas faire la correspondance, et je suppose qu'elle te mettra un '?' a la place.

 

Donc si tu veux des caractères spéciaux dans ta base : il faut qu'elle soit UTF-8
Sinon : tu fais comme tu veux.
Grâce au "SET NAMES", rien ne change au niveau du code (c'est l'intérêt de la chose).

 

Sinon je suis en MySQL 5. Apparemment ( http://www.dicodunet.com/actualite [...] -mysql.htm + la doc mySQL), l'UTF-8 n'est supporté que depuis la 4.1 par contre...


Message édité par theredled le 11-06-2007 à 20:43:31

---------------
Contes de fées en yaourt --- --- zed, souviens-toi de ma dernière lettre. --- Rate ta musique
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed