J'ai hérité d'un système Web qu'il me fallait développer davantage ... Le système semble avoir été créé par quelqu'un qui a lu deux chapitres d'un tutoriel PHP et qui pensait pouvoir coder ...
Alors ... la page Web elle-même est en UTF8 et affiche et entre tout ce qui y est écrit. Les tables de base de données ont été créées avec le jeu de caractères UTF8. Mais, dans la configuration, il y a "SET NAMES LATIN1". En d'autres termes, les chaînes codées UTF8 sont renseignées dans la base de données avec un codage latin1 forcé.
Y a-t-il un moyen de convertir ce désordre pour qu'il stocke réellement dans utf8 et se débarrasse de latin1?
J'ai essayé this , mais comme la table de la base de données est définie sur utf8, cela ne fonctionne pas. Aussi essayé celui-ci sans succès.
Je peux peut-être faire cela en lisant toutes les tables de PHP avec codage latin1, puis les réécrivant dans une nouvelle base de données en utf8, mais je veux éviter si possible.
J'ai réussi à le résoudre en exécutant des mises à jour sur des champs de texte comme ceci:
UPDATE table SET title = CONVERT(CONVERT(CONVERT(title USING latin1) USING binary) USING UTF8)
La situation n'est pas aussi mauvaise que vous le pensez, à moins que vous n'ayez déjà beaucoup de caractères non romains (c'est-à-dire des caractères non représentables en latin-1) dans votre base de données. Latin-1 est un sous-ensemble approprié d'utf8. Votre application Web fonctionne dans utf8 et le contenu de vos tables est également dans utf8. Il n'y a donc pas besoin de convertir les tables.
Donc, essayez de changer le SET NAMES latin1
en SET NAMES utf8
. Cela résoudra probablement votre problème en permettant à la connexion de votre programme php de fonctionner avec le même jeu de caractères que le code à l'une des extrémités de la connexion.
Lis ça. http://dev.mysql.com/doc/refman/5.7/en/charset-connection.html
Changer le type de données de la colonne
versVARBINARY et il convertit automatiquement les données latin1
Merci les gars . J'espère que c'est utile.