gpt4 book ai didi

mysql - 更改排序规则时,UTF8 编码文本被错误更改

转载 作者:行者123 更新时间:2023-11-29 14:20:59 25 4
gpt4 key购买 nike

我们有一个 MySQL 表,其中的字段使用 latin1_swedish_ci,但是其中有一些 UTF-8 编码的数据。

当我将排序规则从 latin1_swedish_ci 更改为 utf8_general_ci 时,它可以很好地转换 ISO-8859-1 内容,但 UTF-8 数据会被破坏,看到类似的情况。 ..你是。

有什么想法吗?

编辑:我们正在使用 InnoDB 和 MySQL 5.1

最佳答案

那么,您的“latin1”列有一些以 UTF-8 编码的数据,但不是所有数据,现在您有一些以 UTF-8 双重编码的数据?

您可以这样做来修复双重编码值:首先转换回 latin1,将字符串重新解释为二进制,并告诉 MySQL 该二进制字符串实际上是用 UTF-8 编码的文本。在 MySQL 中可以写成:

convert(binary convert(mycolumn using latin1) using utf8)

现在的问题是检测哪些字符串是双重编码的,以便您可以只更新那些字符串。这可以通过比较原始字符串的字符长度与新字符串的字节长度来完成;对于双重编码的文本,它们应该是相等的。这就是你最终的结果:

update mytable set mycolumn = @str where char_length(mycolumn) = 
length(@str := convert(binary convert(mycolumn using latin1) using utf8));

关于mysql - 更改排序规则时,UTF8 编码文本被错误更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11761936/

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