2009-06-23 6 views
2

J'ai des données codées latin1 dans une base de données mysql UTF-8, comment résoudre ce problème? Il n'y a pas de données originales à partir de malheureusement.J'ai des données codées latin1 dans une base de données mysql UTF-8, comment résoudre ce problème?

Je me suis rendu compte que la seule façon d'afficher correctement les données était de tout paramétrer latin1 en PHP, HTML et MySQL.

Une fois que cela est terminé, je peux tout changer en utf-8 dans mes fichiers html et php.

Versions: mysql Ver 14,12 Distrib 5.0.51a, pour debian-linux-gnu (x86_64) en utilisant readline 5.2

EDIT: Je dois mentionner, tout fonctionne OK comme je dis et PHP HTML pour utiliser l'encodage latin1, cependant, cela me semble mauvais.

+0

Quelle est la version de mysql? –

+0

mysql Ver 14.12 Distrib 5.0.51a, pour debian-linux-gnu (x86_64) en utilisant readline 5.2 – MichaelICE

Répondre

3

Je crois que this article does exactly what you need to.

J'ai paraphrasé les étapes que vous devez suivre ci-dessous - remplacez 'MyDb' par le nom de votre base de données. Je vous recommande de faire une sauvegarde avant de commencer!

USE information_schema; 
SELECT CONCAT('ALTER TABLE ', table_name, ' MODIFY ', column_name, ' ', REPLACE(column_type, 'char', 'binary'), ';') FROM columns WHERE table_schema = 'MyDb' and data_type LIKE '%char%'; 
SELECT CONCAT('ALTER TABLE ', table_name, ' MODIFY ', column_name, ' ', REPLACE(column_type, 'text', 'blob'), ';') FROM columns WHERE table_schema = 'MyDb' and data_type LIKE '%text%'; 
SELECT CONCAT('ALTER TABLE ', table_name, ' MODIFY ', column_name, ' ', column_type, ' CHARACTER SET utf8;') FROM columns WHERE table_schema = 'MyDb' and data_type LIKE '%char%'; 
SELECT CONCAT('ALTER TABLE ', table_name, ' MODIFY ', column_name, ' ', column_type, ' CHARACTER SET utf8;') FROM columns WHERE table_schema = 'MyDb' and data_type LIKE '%text%'; 

Copie la sortie de tous les SELECT énoncés ci-dessus dans un script SQL. Ajouter ce qui suit à elle:

ALTER DATABASE MyDb CHARACTER SET utf8; 

Passer au MyDb (USE MyDb;) et exécutez le script SQL.

0

Vous pouvez essayer d'exécuter la requête suivante:

ALTER TABLE tbl_name CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci; 

NOTE: Je ne l'ai pas essayé, mais cela provient de la documentation MY-SQL (http://dev.mysql.com/doc/refman/5.0/en/charset-column.html).
La page ci-dessus a plus d'informations, mais cela semble être la requête que vous voulez (elle est affichée juste en bas si vous vous posez la question). J'espère que cela t'aides.

+0

Toutes mes tables et colonnes sont en UTF-8, c'est juste les données à l'intérieur qui sont encore encodées en latin1. – MichaelICE

+0

Oh, désolé - avez-vous essayé d'utiliser CONVERT (colonne USING utf8) sur toutes vos requêtes? Et puis éventuellement mettre à jour chaque ligne de la table en utilisant ces données converties? –

Questions connexes