1

我正在使用适用于 Linux (x86_64) 的 mysql 数据库 Ver 14.14 Distrib 5.5.21。我使用 java 类中的准备好的语句将字符串保存到这个数据库中。

现在我想确保我保存的所有字符串都是 UTF-8 格式并且不包含损坏的(如数据库创建模式中定义的)字符。因为字符串已经损坏,因此包含问题标签而不是应该存在的字符。就我而言,显示的是“R��ckenschmerzen”而不是“Rückenschmerzen”。德语字符“ü”被破坏了。是否可以通过 JUnit 测试找到此类错误?

任何帮助,将不胜感激。先感谢您。贺拉斯

4

2 回答 2

0

默认情况下,MySql 数据库配置为使用latin1字符集,但您可以在my.ini

# The default character set that will be used when a new schema or table is
# created and no character set is defined
#default-character-set=latin1

default-character-set=utf8

默认情况下使用utf8_general_ci排序规则,但还有其他排序规则,总共支持“650 种语言”,请查看手册。

于 2012-11-08T16:03:07.817 回答
0

@Roman:非常感谢您提供的信息,Roman。但我想我问错了问题。正确的问题应该是: 如何检查字符串是否为有效的 UTF-8 格式(使用 java)?

因为我认为如果您将数据库设置为 UTF-8,然后错误地对另一种编码的字符串进行写入操作,它仍然会被保存(将替换代码 U+FFFD � 用于最终未知字符)

所以我的解决方案是检查数据库中的字符串是否包含U+FFFD or �.

或者另一种预防性解决方案是在我将字符串保存到数据库之前确保字符串中的字符都是 utf-8 格式,例如:

    String myString = "blablabla";
    String finalStringToBeInserted = new String(myString.getBytes(), "UTF-8");
    saveToDatabase(finalStringToBeInserted);

问候,贺拉斯

于 2012-11-08T16:55:00.660 回答