我有一个场景,有两个MySQL数据库(UTF-8),一个Java代码(一个定时服务),它同步两个数据库(首先读取它们并写入/更新到第二个)和一个允许修改数据加载的Web应用程序第二个数据库.
所有数据库访问都是使用IBATIS进行的(但我发现使用JDBC,PreparedStatements和ResultSets时我遇到了同样的问题)
当我的java代码从第一个数据库中读取数据时,我会获得类似于'ó'必须时的字符'ó'.该数据在没有修改第二数据库的情况下被编辑.
后来,当我在我的Web应用程序中看到加载的数据时,尽管如此,我还是看到了外部字符<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />.
如果我使用...解码数据
new String(data.getBytes("UTF-8"));
Run Code Online (Sandbox Code Playgroud)
......我正确地想象了角色(ó).但我不能将此解决方案作为一般规则使用,因为当我使用Web应用程序表单修改数据时,我的第二个数据库中的数据不会以UTF-8更新(尽管数据库是UTF-8且我的连接字符串使用了字符编码, characterSetResults和useUnicode参数).
从我的Java代码中获取以下数据库设置:
character_set_client-->utf8
character_set_connection-->utf8
character_set_database-->utf8
character_set_filesystem-->binary
character_set_results-->utf8
character_set_server-->latin1
character_set_system-->utf8
character_sets_dir-->/usr/local/mysql51/share/mysql/charsets/
Run Code Online (Sandbox Code Playgroud)
character_set_server设置无法更改,我不知道我做错了什么!!
如何使用JDBC connector(mysql-connector-java-5.1.5-bin.jar)从MySQL读取UTF-8数据?
从第一个数据库读取数据或写入第二个数据库是否有问题?
Dou*_*eri 37
有点晚了,但这会对你有所帮助:
DriverManager.getConnection(
"jdbc:mysql://" + host + "/" + dbName
+ "?useUnicode=true&characterEncoding=UTF-8", user, pass);
Run Code Online (Sandbox Code Playgroud)
您可以将file.encodingJVM 的属性设置为UTF-8,以便所有区域设置/编码敏感API将解码的字符串视为UTF8.
例如,您可以在启动Java应用程序的命令行中进行设置:
java -Dfile.encoding=UTF-8 ....
Run Code Online (Sandbox Code Playgroud)
您还可以参考此SO问题以获取有关Tomcat设置的完整说明.