使用Java

时间:2017-10-19 12:49:28

标签: java mysql jdbc

在我的本地环境中它工作正常,在我的生产环境中,它没有。

我一直在互联网上阅读很多答案。似乎我没有得到我正在寻找的答案。

我可以从数据库中读取中文字符。当我将汉字写入数据库时​​,它们就像'???'一样。当我查询数据库以在数据库中查找中文条目时,结果集为空。

我使用Java进行开发,jdk 1.6。 MySQL服务器:5.0.91

我的网络应用程序在网页标题中有utf-8。在我的servlet中,我将字符编码设置为utf-8.我的表格和表格中的列使用utf8_general_ci

我将?useUnicode=yes&characterEncoding=UTF-8添加到我的数据库的网址中。我在查询之前添加了SET NAMES 'UTF8' COLLATE 'utf8_general_ci'

Character_set_connection = utf8

我注意到在生产服务器上character_set_server = latin1.但是,当我在本地环境中将character_set_server更改为latin1时,我仍然可以插入中文字符。

在我的制作环境中,他们告诉我其他人没有任何问题。

我认为我几乎涵盖了很多人的建议。任何人都知道还有什么可能是问题吗?

更新:在没有良好解决方案的情况下,为需要的人提供快速临时修复。

在数据库中插入变量name

使用数据类型name_as_bytes

创建新列varbinary()

name转换为字节数组
byte[] nameAsBytes = name.getBytes("UTF-8");

nameAsBytes中的name_as_bytes中插入数据库

使用convert()函数

name_as_bytes列复制到name
update myTable set name = CONVERT(nameAsBytes USING utf8) where ID = id;

执行额外查询并添加额外列时,这不是一个理想的解决方案,但它有助于让您的网站在寻找解决方案时继续运行。

1 个答案:

答案 0 :(得分:0)

我终于通过两次手术解决了这个问题。
1.要处理数据库,请创建具有字符集(例如CREATE DATABASE name CHARACTER SET 'utf8mb4';
的表/数据库) 2.要使用JDBC,请在连接URL之后添加characterEncodinguseUnicode属性,例如jdbc:mysql://ip/dbname?useUnicode=yes&characterEncoding=UTF-8

附言之所以使用utf8mb4而不是utf8,是因为后者支持的汉字更少。