ラケシュ12345
Rätt?
Förmodligen vad som hände när INSERTing var
- Du hade korrekt utf8-kodning för data, och
- SET NAMES latin1 -- som standard eller av misstag, och
- Kolumnen (eller tabellen) som texten lagrades i deklarerades med
CHARACTER SET latin1
, återigen möjligen som standard.
Du kan verifiera att data lagras korrekt genom att göra
SELECT col, HEX(col) ...
Om du hämtar den strängen blir hexen E383A9E382B1E382B7E383A5EFBC91EFBC92EFBC93EFBC94EFBC95
. Lägg märke till hur det finns grupper om 6 hex, med start E383
i fallet med Katakana eller EFBC
för "siffrorna i full bredd".
Förutsatt att tabellen fortfarande säger latin1, går ingen data förlorad och 2-stegs ALTER kommer att fixa det. Sammanfattningsvis:
ALTER TABLE Tbl MODIFY COLUMN col VARBINARY(...) ...;
ALTER TABLE Tbl MODIFY COLUMN col VARCHAR(...) ... CHARACTER SET utf8 ...;
där längderna är tillräckligt stora och de andra "..." har allt annat (INTE NULL, etc) som redan fanns på kolumnen.
(Jag kunde inte ge detta klart och fullständigt svar på denna fråga förrän helt nyligen.)