首页  >  问答  >  正文

如何解决错误:#1977 - 无法将 'utf8' 字符 0xD8AD 转换为 'latin1'。

我正在使用phpMyAdmin工作,我的name列中有阿拉伯字符值,例如کلب الرقيّة علی العزیزبوری,我想将它们转换为正确的形式。

我尝试了以下查询,并将表中的大多数记录转换为正确的形式。


ALTER DATABASE alfeker_book CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE guestbook CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
UPDATE guestbook SET name = CONVERT(BINARY CONVERT(name USING latin1) USING utf8mb4);

我还尝试了其他方法。

UPDATE guestbook SET name = CONVERT(BINARY CONVERT(name USING binary) USING utf8mb4);

但其中几个保持不变,并显示以下错误。

#1977 - Cannot convert 'utf8' character 0xD8AD to 'latin1'

我还尝试了这个查询。:

SELECT id,name, CONVERT(BINARY CONVERT(name USING latin1) USING utf8mb4) AS converted_name FROM guestbook;

这个查询运行良好,完美地显示了未转换的字符。但是当我使用更新查询时,它不起作用。

P粉574695215P粉574695215459 天前560

全部回复(1)我来回复

  • P粉460377540

    P粉4603775402023-07-19 00:22:56

    这是阿拉伯文本的乱码或"双重编码"。

    有几种方法可以修复数据。只有一种方法可以改善它,其他方法会使情况变得更糟。

    你看一下这个UTF-8字符的问题;我看到的不是我存储的内容 并按照其中关于获取数据库中内容的十六进制值的建议进行操作,此外还提供当前模式定义的SHOW CREATE TABLE。还请提供SHOW VARIABLES LIKE 'char%'和连接参数。


    在备份各种ALTER和CONVERT之前,请提供十六进制值,我可能会选择正确的转换方法。


    回复
    0
  • 取消回复