Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Exibindo caracteres japoneses de SQLException.getMessage()

ラケシュ12345

Correto?

Provavelmente o que aconteceu quando INSERTing foi
  • Você acertou a codificação utf8 para os dados e
  • SET NAMES latin1 -- por padrão ou por engano, e
  • A coluna (ou tabela) em que o texto foi armazenado foi declarada com CHARACTER SET latin1 , novamente possivelmente por padrão.

Você pode verificar se os dados estão armazenados corretamente fazendo
SELECT col, HEX(col) ...

Se você buscar essa string, o hexadecimal será E383A9E382B1E382B7E383A5EFBC91EFBC92EFBC93EFBC94EFBC95 . Observe como existem grupos de 6 hexadecimais, iniciando E383 no caso de Katakana ou EFBC para os "dígitos de largura total".

Assumindo que a tabela ainda diz latin1, nenhum dado é perdido e o 2-step ALTER irá corrigi-lo. Resumindo:
ALTER TABLE Tbl MODIFY COLUMN col VARBINARY(...) ...;
ALTER TABLE Tbl MODIFY COLUMN col VARCHAR(...) ... CHARACTER SET utf8 ...;

onde os comprimentos são grandes o suficiente e os outros "..." têm o que mais (NOT NULL, etc) já estava na coluna.

(Eu não poderia dar uma resposta clara e completa a essa pergunta até muito recentemente.)