【发布时间】:2011-04-18 21:45:26
【问题描述】:
我在我们的 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')
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 有DEFAULT CHARSET=utf8
EDIT3:
实际上使用上述设置,load 没有做正确的事(我无法与现有的 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/ |
+--------------------------+----------------------------+
再次上传数据,最后我正确加载了数据(与现有数据相当)。
【问题讨论】:
-
目前使用的是什么编码?数据是如何插入的?
-
回显 NullUserException,请发布
SHOW CREATE TABLE TableName的输出。也请发布SHOW VARIABLES LIKE 'character_set%'的输出。 -
@Hammerite,NullUserException,感谢您的输入...
-
很高兴您解决了问题。
标签: mysql character-encoding mojibake