gpt4 book ai didi

mysql - 修复编码

转载 作者:行者123 更新时间:2023-11-29 01:33:39 25 4
gpt4 key购买 nike

我最终在我们的一个 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

编辑 3:

实际上,使用上述设置,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/ |
+--------------------------+----------------------------+

再次上传数据,然后终于正确加载了数据(与现有数据相比)。

最佳答案

您的文本已被编码为 UTF-8,然后被错误地重新解码为 Mac Roman .

您将无法在数据库中修复此问题,因为 MySQL 不知道 Mac Roman 编码。您可以编写一个脚本来遍历每个受影响表的每一行,并通过反转编码/解码周期来修复文本。 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罗马。最后使用 mysql < dump.sql 重新导入转储.

关于mysql - 修复编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3823278/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com