我有一个定义为的字段Question VARCHAR(1024) CHARACTER SET utf8 NOT NULL
。我们的应用程序将双重编码数据存储到该字段中。例如,在 phpMyAdmin 中é
显示,并在传递给.é
C383C2A9
HEX
我添加了第二个字段 ( DoubleEncoded TINYINT NOT NULL DEFAULT 1
),用于标识哪些记录存在此问题。
我想修复剩余的字段。有没有办法使用 MySQL SQL 来做到这一点?换句话说,我需要替换decode_utf8
以下内容:
UPDATE `MyTable`
SET `Question` = decode_utf8(`Question`),
`DoubleEncoded` = 0
WHERE `DoubleEncoded` = 1
数据似乎以 UTF-8 正确编码。phpMyAdmin 正在使用 latin1 配置呈现 UTF-8 字符串。
修复您的 phpMyAdmin 和/或网络服务器配置,而不是您的数据。您可能已将网络服务器的默认配置设置为 ISO-8859-1 而不是 UTF-8,或者 phpMyAdmin 可能正在设置此编码。可以使用不同的标头指定两种编码的标头。不同的浏览器以不同的方式解决这个问题,因此如果您使用不同的浏览器,您可能会得到不同的呈现。
在确认文本存储不正确之前不要更改文本,而不仅仅是阅读不正确。按照https://stackoverflow.com/a/38363567/1766831
HEX()
中“测试数据”中的说明使用。在同一个链接中向下移动,您可以看到有缺陷数据的可能原因。