我有一个带有“latin1_swedish_ci”排序规则的mysql表。该表用于存储多种语言的字符串(俄语,英语,拉脱维亚语)。结果,存储在表中的字符串被错误编码。
例如:Двери
存储为Двери
我花了好几个小时试图找到编码,这样我就可以通过“utf8_general_ci”整理在新表中正确存储字符串。
我使用python来猜测错误字符串的解码。我经历了数十种不同的编码,而我得到的最接近的是
print "Двери".decode("latin1")
给了我ÐвеÑи
,这是接近但不完全Двери
我想知道latin1编码是否有一些变化,这会给我一个正确的编码?如果有人建议如何解决类似问题,我将不胜感激? 感谢。
答案 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')
Двери