如何在mysql中解码错误编码的数据

时间:2011-02-21 05:43:08

标签: mysql encoding utf-8

我有一个带有“latin1_swedish_ci”排序规则的mysql表。该表用于存储多种语言的字符串(俄语,英语,拉脱维亚语)。结果,存储在表中的字符串被错误编码。 例如:Двери存储为Двери

我花了好几个小时试图找到编码,这样我就可以通过“utf8_general_ci”整理在新表中正确存储字符串。

我使用python来猜测错误字符串的解码。我经历了数十种不同的编码,而我得到的最接近的是 print "Двери".decode("latin1")
给了我ÐвеÑи,这是接近但不完全Двери

我想知道latin1编码是否有一些变化,这会给我一个正确的编码?如果有人建议如何解决类似问题,我将不胜感激? 感谢。

2 个答案:

答案 0 :(得分:1)

当存储数据中使用的编码与为列定义的编码不匹配时,您可以先切换到二进制类型,然后再切换回具有相应字符集的文本类型。例如,备份数据库后,

ALTER TABLE table MODIFY col varbinary(...);
ALTER TABLE table MODIFY col varchar(...) CHARACTER SET utf8;

通过(例如)发出SET CHARACTER SET utf8命令,确保您的客户端也使用UTF8连接到服务器。

另见:

答案 1 :(得分:0)

这是非常相似但又不同的 CP1252

>>> print u'Двери'.encode('cp1252').decode('utf8')
Двери