2014-06-05 83 views
2

我在DB中有好几年的数据,它是99%的拉丁字符。最近,我已经添加了MySQL连接后,执行以下操作:将mysql字符集更改为utf8,数据库中已存在的非拉丁字符现在无法读取

mysqli_set_charset($link, "utf8"); 

现在是由亚洲,希伯来文等字符数据库中的所有现有数据无法读取,并显示为垃圾数据。

如何修复数据库中的数据,使其可读的utf8字符集?

表字符集始终是utf8。唯一改变的是在连接期间有一个字符集(如上所示),并且在该行不存在之前。

表创建是相当基本,归类为utf8_general_ci

CREATE TABLE `test` (
COLUMNS + INDEXES 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 
+1

请发表您的'CREATE TABLE'语句,所以我们可以看看你的表编码。 – Bjoern

回答

2

您现在有一个是双编码数据,并且你将需要修复的数据,然后才能连接上阅读它使用utf8作为字符集。

下面是详细讲解了如何修复您的数据的博客: http://www.mysqlperformanceblog.com/2013/10/16/utf8-data-on-latin1-tables-converting-to-utf8-without-downtime-or-double-encoding/

+0

该表从一开始就是utf8,唯一不同的是在连接到服务器期间没有指定charset。另外,我们的数据库集群是几台机器,数据集非常大。有没有其他方法可以逐行解决这个问题? – adrianfd

+1

在评论中找到了解决方案:convert(cast(convert(name using latin1)as binary)using utf8) – adrianfd