sql >> Databasteknik >  >> RDS >> Mysql

Visar japanska tecken från SQLException.getMessage()

ラケシュ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.)




  1. Hur man hanterar transaktioner över flera databaser

  2. Det går inte att logga in på SQL Server med Windows-autentisering

  3. NYHETER:Ny Microsoft SQL Server Native Client 18 släppt!

  4. Oracle - vad händer med transaktionen om ORA-03135-anslutningen förloras?