UTF-8 :( [mysql] - SQL/NoSQL - Programmation
Marsh Posté le 29-05-2007 à 16:03:35
ReplyMarsh Posté le 29-05-2007 à 16:04:52
FlorentG a écrit : Oublie pas un
|
Ca fait quoi ça ? Pas moyen de le configurer automatiquement ?
Marsh Posté le 29-05-2007 à 16:09:42
En tout cas ça marche nickel merci bien
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 ça devrait pas changer les données reçues selon cette définiton
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.) |
Marsh Posté le 29-05-2007 à 16:18:51
Effectivement c'est mieux
Le pire c'est que ce truc fait marcher nickel mon site codé/affichant en utf-8 en gardant ma base en ISO
edit : ouais en fait c'est tout à fait normal mais c'est tout aussi génial
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.
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
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 ? Pourrais-tu m'indiquer également quelle version de MySQL tu utilises. Dernière chose, pourrais-tu m'indiquer comment modifier le charset de chaque table ? 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
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...
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
---------------
Contes de fées en yaourt --- █ --- zed, souviens-toi de ma dernière lettre. --- Rate ta musique