在我的本地环境中它工作正常,在我的生产环境中,它没有。
我一直在互联网上阅读很多答案。似乎我没有得到我正在寻找的答案。
我可以从数据库中读取中文字符。当我将汉字写入数据库时,它们就像'???'
一样。当我查询数据库以在数据库中查找中文条目时,结果集为空。
我使用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;
执行额外查询并添加额外列时,这不是一个理想的解决方案,但它有助于让您的网站在寻找解决方案时继续运行。
答案 0 :(得分:0)
我终于通过两次手术解决了这个问题。
1.要处理数据库,请创建具有字符集(例如CREATE DATABASE name CHARACTER SET 'utf8mb4';
的表/数据库)
2.要使用JDBC,请在连接URL之后添加characterEncoding
和useUnicode
属性,例如jdbc:mysql://ip/dbname?useUnicode=yes&characterEncoding=UTF-8
附言之所以使用utf8mb4
而不是utf8
,是因为后者支持的汉字更少。