Ich arbeite mit phpMyAdmin und habe in meiner Namensspalte arabische Zeichenwerte wie کلب الرقيÙ'Ø© علی العزیزبوری, Ich möchte sie in die richtige Form umwandeln.
Ich habe die folgende Abfrage ausprobiert und sie hat die meisten Datensätze in der Tabelle in die richtige Form konvertiert.
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);
Ich habe auch andere Methoden ausprobiert.
UPDATE guestbook SET name = CONVERT(BINARY CONVERT(name USING binary) USING utf8mb4);
Aber einige davon bleiben gleich und zeigen den folgenden Fehler.
#1977 - Cannot convert 'utf8' character 0xD8AD to 'latin1'
Ich habe diese Abfrage auch ausprobiert. :
SELECT id,name, CONVERT(BINARY CONVERT(name USING latin1) USING utf8mb4) AS converted_name FROM guestbook;
Diese Abfrage funktioniert einwandfrei und zeigt die nicht konvertierten Zeichen perfekt an. Aber wenn ich die Update-Abfrage verwende, funktioniert es nicht.
这是阿拉伯文本的乱码或"双重编码"。
有几种方法可以修复数据。只有一种方法可以改善它,其他方法会使情况变得更糟。
你看一下这个UTF-8字符的问题;我看到的不是我存储的内容并按照其中关于获取数据库中内容的十六进制值的建议进行操作,此外还提供当前模式定义的SHOW CREATE TABLE。还请提供SHOW VARIABLES LIKE 'char%'和连接参数。
在备份各种ALTER和CONVERT之前,请提供十六进制值,我可能会选择正确的转换方法。