Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 固定编码_Mysql_Character Encoding_Mojibake - Fatal编程技术网

Mysql 固定编码

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')

在我们的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具有默认字符集=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重新导入转储文件当前使用的是什么编码?如何插入数据?回显NullUserException,请发布SHOW CREATE TABLE TableName的输出。还请发布显示变量的输出,如“character_set%”。@Hammerite,NullUserException,感谢您的输入…很高兴您解决了您的问题。谢谢您,先生。。。我将用解决方案更新问题;实际上,我在文件中有数据