我有一个坐在UTF-8 mysql数据库中的latin1编码数据,我该如何解决这个问题?

时间:2009-06-23 00:39:45

标签: php mysql encoding character-encoding

我有一个位于UTF-8 mysql数据库中的latin1编码数据,我该如何解决?不幸的是没有原始数据。

我认为这是我能正确显示数据的唯一方法是在PHP,HTML和MySQL中设置所有latin1。

一旦完成,我可以在html和php中将所有内容更改回utf-8。

版本: mysql Ver 14.12 Distrib 5.0.51a,debian-linux-gnu(x86_64)使用readline 5.2

修改 我应该提一下,一切正常,因为我告诉PHP和HTML使用latin1编码,但是,这对我来说似乎很糟糕。

2 个答案:

答案 0 :(得分:4)

我相信this article does exactly what you need to

我已经解释了你需要采取的步骤 - 用你的数据库名称替换'MyDb'。 我建议您在开始之前进行备份!

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%';

将上述所有SELECT语句的输出复制到SQL脚本中。添加以下内容:

ALTER DATABASE MyDb CHARACTER SET utf8;

切换到MyDb(USE MyDb;)并运行SQL脚本。

答案 1 :(得分:0)

您可以尝试运行以下查询:

ALTER TABLE tbl_name CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;

注意:我没有尝试过,但这是从MY-SQL文档(http://dev.mysql.com/doc/refman/5.0/en/charset-column.html)中获取的。
上面链接的页面有一些更多的信息,但这似乎是你想要的查询(它是在你想知道的情况下发布在底部)。希望这会有所帮助。