gpt4 book ai didi

mysql - 修复 Unicode Oops

转载 作者:行者123 更新时间:2023-11-29 06:23:41 26 4
gpt4 key购买 nike

看来我们已经成功地在数据库中为我们想要的每个 unicode 字符插入了 2 个 unicode 字符,

例如,对于 unicode 字符 0x3CBC,我们为其每个组件插入了 unicode 等效项(0xC383 和 0xC2BC)

有人能想出一个简单的解决方案来解决这个问题吗?

我想出了类似的东西

SELECT 替换(名称, CONCAT(0xC3,0x83,0xc2,0xbc), CONCAT(0xc3,0xbc)) FROM lang

对于上述内容,但不想对每个 unicode 字符都执行此操作!

最佳答案

for the unicde char 0x3CBC

我假设您指的是带有分音符的 Unicode 字符 U+00FC 拉丁文小写字母 U (ü),它以 UTF-8 编码为\xC3\xBC。

我认为您无法在 MySQL 内部进行更改。你可以这样做:

-- convert doubly-encoded UTF-8 to singly-encoded
ALTER TABLE table MODIFY column TEXT CHARACTER SET latin1;
-- deliberately lose encoding information
ALTER TABLE table MODIFY column BLOB;
-- interpret the single-encoded UTF-8 bytes as UTF-8
ALTER TABLE table MODIFY column TEXT CHARACTER SET utf8;

对于架构中的每一列。这适用于您给出的特定示例,但当 UTF-8 跟踪字节之一位于 0x80-0x9F 范围内时会失败。这是因为 MySQL 的“拉丁”编码实际上并不是 ISO-8859-1,而是 Windows cp1252,它以不同的方式映射范围内的字符。

可能最简单的方法是转储批处理并在 mysqldump 文件上进行转换。例如。来自Python:

# Remove one level of UTF-8 encoding
#
dump= open('/path/to/dump.sql', 'rb').read()
dump= dump.decode('utf-8').encode('iso-8859-1')
open('/path/to/dump-out.sql', 'wb').write(dump)

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

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