java连接mysql中文乱码主因是jdbc url未正确配置useunicode=true和characterencoding=utf-8,且需同步确保数据库服务端为utf8mb4、配置文件设默认字符集、java源文件保存为utf-8。

Java 连接 MySQL 时出现中文乱码,绝大多数情况不是代码写错了,而是数据库连接 URL 中字符编码参数没配对、没生效,或者和数据库实际字符集不匹配。
必须加的两个核心参数
在 JDBC URL 的查询参数部分(即 ? 后面),至少要明确指定以下两项:
- useUnicode=true:告诉驱动启用 Unicode 支持,这是启用后续编码配置的前提;
- characterEncoding=UTF-8:指定客户端与服务器通信时使用的字符编码。注意必须是 UTF-8(中间有短横线),不能写成 utf8、UTF8 或 utf_8。
示例完整 URL 片段:
jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=UTF-8
配套动作缺一不可
只改 URL 不够,这三项必须同步到位:
- 数据库服务端字符集需为 utf8mb4(推荐)或至少 utf8,建库建表时显式指定:
CREATE DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; - MySQL 配置文件(my.cnf 或 my.ini)中应设置默认字符集:
[client] default-character-set = utf8mb4
[mysqld] character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci - 确保 Java 源文件本身保存为 UTF-8 编码(IDE 设置里检查),避免字符串字面量在编译阶段就出错。
常见误区与典型报错
这些配置看似简单,但容易踩坑:
- 漏掉 useUnicode=true —— 即使写了 characterEncoding=UTF-8,驱动也可能忽略它;
- URL 中用空格或中文分隔符(如全角问号、顿号)导致参数解析失败;
- 把 characterEncoding 错写成 charset 或 encoding(JDBC 不识别);
- Tomcat 等容器未配置 URI 编码,默认用 ISO-8859-1 解析请求参数,造成前端传中文 → 后端取值乱码,误以为是数据库问题。
验证是否生效的小技巧
连接成功后,执行 SQL 查询当前连接的字符集设置:
- SHOW VARIABLES LIKE 'character_set%'; —— 关注 character_set_client、character_set_connection、character_set_results 是否均为 utf8mb4;
- 插入一条含中文的测试记录,再查出来打印,确认控制台/日志中显示正常,而非问号或方块。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











