ラケシュ12345
Richtig?
Wahrscheinlich passierte das, als INSERTing war
- Sie hatten die richtige utf8-Kodierung für die Daten und
- SET NAMES latin1 - standardmäßig oder aus Versehen und
- Die Spalte (oder Tabelle), in der der Text gespeichert wurde, wurde mit
CHARACTER SET latin1
deklariert , wieder möglicherweise standardmäßig.
Sie können überprüfen, ob die Daten korrekt gespeichert sind, indem Sie
SELECT col, HEX(col) ...
Wenn Sie diese Zeichenfolge abrufen, lautet der Hexadezimalwert E383A9E382B1E382B7E383A5EFBC91EFBC92EFBC93EFBC94EFBC95
. Beachten Sie, dass es Gruppen von 6 Hex gibt, beginnend mit E383
im Fall von Katakana oder EFBC
für die "Vollbreitenziffern".
Unter der Annahme, dass in der Tabelle immer noch latin1 steht, gehen keine Daten verloren, und der 2-Schritt-ALTER wird es beheben. Zusammengefasst:
ALTER TABLE Tbl MODIFY COLUMN col VARBINARY(...) ...;
ALTER TABLE Tbl MODIFY COLUMN col VARCHAR(...) ... CHARACTER SET utf8 ...;
wo die Längen groß genug sind und die anderen "..." haben, was auch immer sonst (NOT NULL, etc) schon auf der Spalte war.
(Bis vor kurzem konnte ich diese Frage nicht klar und vollständig beantworten.)