Mysql 固定编码
在我们的mysql专栏中,我最后发现了一个混乱的字符编码 通常我有 √©代替 √∂ 而不是 √≠ 而不是 等等 很肯定这里的人会知道发生了什么,以及如何修复 更新: 根据bobince的回答,由于我在一个文件中有这些数据,我做了以下工作Mysql 固定编码,mysql,character-encoding,mojibake,Mysql,Character Encoding,Mojibake,在我们的mysql专栏中,我最后发现了一个混乱的字符编码 通常我有 √©代替 √∂ 而不是 √≠ 而不是 等等 很肯定这里的人会知道发生了什么,以及如何修复 更新: 根据bobince的回答,由于我在一个文件中有这些数据,我做了以下工作 #!/user/bin/env python import codecs f = codecs.open('./file.csv', 'r', 'utf-8') f2 = codecs.open('./file-fixed.csv', 'w', 'utf-8')
#!/user/bin/env python
import codecs
f = codecs.open('./file.csv', 'r', 'utf-8')
f2 = codecs.open('./file-fixed.csv', 'w', 'utf-8')
for line in f:
f2.write(line.encode('macroman').decode('utf-8')),
之后
load data infile 'file-fixed.csv'
into table list1
fields terminated by ','
optionally enclosed by '"'
ignore 1 lines;
正确导入数据
更新2:
Hammerite,为了完整起见,这里是要求的详细信息
mysql> SHOW VARIABLES LIKE 'character_set%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
我要导入的表的SHOW CREATE TABLE具有默认字符集=utf8
编辑3:
事实上,在上面的设置下,加载没有做正确的事情,我无法与现有的utf8字段进行比较,我加载的数据看起来好像加载正确;我假设由于错误,但匹配了客户端、连接和结果字符集,因此我将设置更新为:
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
再次上传数据,最后我得到了正确加载的数据,与现有数据相当。您的文本已被编码为UTF-8,然后重新解码,错误为 您将无法在数据库中修复此问题,因为MySQL不知道Mac罗马编码。您可以编写一个脚本来遍历每个受影响表的每一行,并通过反转编码/解码周期来修复文本。Python是一种可能性,它有很好的编码范围:
>>> print u'é'.encode('macroman').decode('utf-8')
é
>>> print u'ö'.encode('macroman').decode('utf-8')
ö
>>> print u'í'.encode('macroman').decode('utf-8')
í
或者,如果没有不受此问题影响的非ASCII内容,您可以尝试使用mysqladmin导出SQL转储,然后立即转换所有内容,或者使用如上所述的脚本,或者,如果您在Mac上可能有一个文本编辑器,则可以将脚本加载为UTF-8,然后将其保存为Mac Roman。最后,使用mysql重新导入转储文件