# MySQL JDBC中文乱码怎么办 ## 前言 在使用Java程序通过JDBC连接MySQL数据库时,中文乱码是开发者经常遇到的问题。本文将全面分析乱码产生的原因,并提供多种解决方案,帮助开发者彻底解决MySQL JDBC中文乱码问题。 ## 一、乱码产生的原因 ### 1.1 字符集不匹配的三层结构 MySQL中文乱码通常由以下三层字符集不匹配导致: - 客户端字符集(Java程序) - 连接层字符集(JDBC传输) - 数据库/表/字段字符集 ### 1.2 常见乱码场景 1. 插入数据变成"???"或乱码 2. 查询结果显示为乱码 3. 数据在Java程序中正常,存入数据库后乱码 ## 二、解决方案大全 ### 2.1 JDBC连接参数配置(推荐) 在连接URL中添加字符集参数是最有效的解决方案: ```java String url = "jdbc:mysql://localhost:3306/db_name?useUnicode=true&characterEncoding=UTF-8";
关键参数说明: - useUnicode=true
:启用Unicode支持 - characterEncoding=UTF-8
:指定客户端到服务器的编码
SHOW VARIABLES LIKE 'character_set%'; SHOW VARIABLES LIKE 'collation%';
ALTER DATABASE db_name CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
在MySQL配置文件中添加:
[client] default-character-set=utf8mb4 [mysql] default-character-set=utf8mb4 [mysqld] character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci
IDE中设置文件编码为UTF-8: - Eclipse:Window > Preferences > General > Workspace - IDEA:File > Settings > Editor > File Encodings
String value = new String(str.getBytes("ISO-8859-1"), "UTF-8");
建议使用8.x以上版本的MySQL Connector/J:
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.28</version> </dependency>
utf8
:MySQL中的”假UTF-8”,最多支持3字节utf8mb4
:真正的UTF-8,支持4字节(如emoji表情)建议全部使用utf8mb4:
jdbc:mysql://localhost/db?useUnicode=true&characterEncoding=UTF-8
同时数据库也配置为utf8mb4
对于GET请求参数:
// Tomcat配置 <Connector URIEncoding="UTF-8" />
PreparedStatement ps = conn.prepareStatement("INSERT INTO test VALUES(?)"); ps.setString(1, "中文"); // 自动处理编码
以HikariCP为例:
HikariConfig config = new HikariConfig(); config.setJdbcUrl("jdbc:mysql://localhost/db?useUnicode=true&characterEncoding=UTF-8");
SELECT hex(column_name), column_name FROM table_name;
解决MySQL JDBC中文乱码的关键是保证各环节字符集统一,推荐组合方案: 1. JDBC连接字符串添加UTF-8参数 2. 数据库/表使用utf8mb4字符集 3. 确保应用服务器和客户端编码一致 4. 使用最新版JDBC驱动
通过以上配置,可以彻底解决99%的中文乱码问题。如仍遇到问题,建议使用十六进制调试法定位具体哪个环节出现了编码转换错误。 “`
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。