我有一个位于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编码,但是,这对我来说似乎很糟糕。
答案 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)中获取的。
上面链接的页面有一些更多的信息,但这似乎是你想要的查询(它是在你想知道的情况下发布在底部)。希望这会有所帮助。