在我的本地环境中它工作正常,在我的生产环境中,它没有。
我在网上看了很多答案。看来我没有得到我要找的答案。
我可以从数据库中读取汉字。当我将汉字写入数据库时,它们会像 '???'
一样出现。当我查询数据库查找数据库中的中文条目时,结果集为空。
我使用Java
进行开发,jdk 1.6
。 MySQL服务器:5.0.91
我的网络应用程序的网页 header 中有 utf-8
。在我的 servlet 中,我将字符编码设置为 utf-8。
我的表和表中的列使用 utf8_general_ci
。
我将 ?useUnicode=yes&characterEncoding=UTF-8
添加到我的数据库的 URL。我在查询之前添加了 SET NAMES 'UTF8' COLLATE 'utf8_general_ci'
。
Character_set_connection = utf8
我注意到在生产服务器上,character_set_server = latin1。
但是,当我将本地环境中的 character_set_server
更改为 latin1
时,我仍然可以插入汉字。
在我的生产环境中,他们告诉我其他人没有任何问题。
我想我几乎涵盖了很多人的建议。有人知道还有什么问题吗?
更新:在没有好的解决方案的情况下,为需要它的人提供快速的临时修复。
在数据库中插入变量name
:
使用数据类型 varbinary()
创建一个新列 name_as_bytes
将name
转换为字节数组
byte[] nameAsBytes = name.getBytes("UTF-8");
在数据库的name_as_bytes
中插入nameAsBytes
使用 convert() 函数将 name_as_bytes
列复制到 name
列
update myTable set name = CONVERT(nameAsBytes USING utf8) where ID = id;
执行额外的查询并添加额外的列,这不是一个理想的解决方案,但它有助于在寻找解决方案时让您的网站运行。
最佳答案
我终于通过两次操作解决了这个问题。
1. 做数据库,创建表/数据库,字符集如 CREATE DATABASE name CHARACTER SET 'utf8mb4';
2. 做JDBC,在连接url后添加characterEncoding
和useUnicode
属性,如jdbc:mysql://ip/dbname?useUnicode=yes&characterEncoding=UTF -8
附言使用 utf8mb4
而不是 utf8
因为后者支持的汉字较少。
关于java - 使用Java在MySql数据库中插入汉字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46830289/