java - 使用Java在MySql数据库中插入汉字

标签 java mysql jdbc

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

我在网上看了很多答案。看来我没有得到我要找的答案。

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

我使用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后添加characterEncodinguseUnicode属性,如jdbc:mysql://ip/dbname?useUnicode=yes&characterEncoding=UTF -8

附言使用 utf8mb4 而不是 utf8 因为后者支持的汉字较少。

关于java - 使用Java在MySql数据库中插入汉字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46830289/

相关文章:

mysql - 当 MySQL 处于状态 "Sending data"时,这意味着什么?

php - 在 PHP 中将十六进制转换为图像?

java - 选择某一行SQL

java - 从 MySQL 多线程 Java 获取响应

java - 为什么结果集为空

java - Spring MVC : too much attributes in the model

java - 在 spring data elasticsearch 中保存 ENUM

java - Selenium:注解类型不适用于这种声明

java - unix - x windows/X11 问题

php - php自定义类mysqli中的prepare语句出错