web-dev-qa-db-fra.com

Comment convertir mysql latin1 en utf8

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.

8
Moha

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)
18
Moha

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

2
O. Jones

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.

0
developer ajanthan