我有一个简单的类,它显示数据库中包含日文字符的记录。 类文件的字符编码是UTF-8。我还修改了数据库以使用charset UTF-8。
在控制台上显示包含日文字符的记录没有问题。硬编码也没问题。
但是当我尝试输入具有相同userid(表中的主键)的记录作为旧记录之一时。它抛出SQLException,显示重复的条目错误消息。但它显示垃圾字符。喜欢:
Duplicate entry 'ラケシュ12345' for key 1
那究竟是什么问题。为什么记录正确显示但不是SQLException.getMessage();
答案 0 :(得分:0)
ラケシュ12345
正确?
INSERTing
时可能会发生什么CHARACTER SET latin1
声明,默认情况下也是如此。您可以通过执行
验证数据是否已正确存储SELECT col, HEX(col) ...
如果您获取该字符串,则十六进制将为E383A9E382B1E382B7E383A5EFBC91EFBC92EFBC93EFBC94EFBC95
。注意如何有6个十六进制组,在Katakana的情况下开始E383
或在#34;全宽数字"开始EFBC
。
假设该表仍然显示latin1,没有数据丢失,2-step ALTER将修复它。总结:
ALTER TABLE Tbl MODIFY COLUMN col VARBINARY(...) ...;
ALTER TABLE Tbl MODIFY COLUMN col VARCHAR(...) ... CHARACTER SET utf8 ...;
长度足够大而另一个长度足够..." ..."在列上已经有了其他任何东西(非空等)。
(直到最近,我才能清楚地说明这个问题的答案。)