我正在使用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;
这个查询运行良好,完美地显示了未转换的字符。但是当我使用更新查询时,它不起作用。
这是阿拉伯文本的乱码或"双重编码"。
有几种方法可以修复数据。只有一种方法可以改善它,其他方法会使情况变得更糟。
你看一下这个UTF-8字符的问题;我看到的不是我存储的内容 并按照其中关于获取数据库中内容的十六进制值的建议进行操作,此外还提供当前模式定义的SHOW CREATE TABLE。还请提供SHOW VARIABLES LIKE 'char%'和连接参数。
在备份各种ALTER和CONVERT之前,请提供十六进制值,我可能会选择正确的转换方法。