java jdbc连接url中必须添加useunicode=true&characterencoding=utf-8参数以防止中文乱码,该配置统一连接层字符集,解决插入变问号、查询显示乱码等问题,但需配合mysql服务端utf8mb4字符集使用。

在 Java 的 JDBC 连接 URL 中配置字符集,是防止中文乱码最直接、最常用的方法。只要服务端(MySQL)本身支持 UTF-8(推荐 utf8mb4),客户端通过 URL 显式声明编码,就能让整个连接链路统一使用正确字符集,避免“发送的是中文、存进去是问号或乱码”的问题。
URL 中必须添加的两个关键参数
在 JDBC 连接字符串末尾追加以下参数:
- useUnicode=true:告诉 MySQL 驱动启用 Unicode 支持
- characterEncoding=UTF-8(或 utf8mb4):指定客户端与服务器通信时使用的字符编码
完整示例如下:
jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=UTF-8注意 characterEncoding 的大小写和拼写
该参数值不区分大小写,但建议统一用大写 UTF-8(更规范,也兼容所有主流驱动版本)。不要写成 utf8(这是 MySQL 内部旧别名,JDBC 驱动不识别)、utf_8 或 UTF8(部分老驱动可能不认)。
虽然 MySQL 推荐存储用 utf8mb4 字符集,但 JDBC 的 characterEncoding 参数只接受标准 Java 编码名,所以填 UTF-8 即可——JDBC 驱动会自动映射为服务端的 utf8mb4 行为(前提是 MySQL 服务端已配置支持)。
不同场景下的 URL 写法要点
- 如果连接带 SSL 或其他参数,把
?useUnicode=true&characterEncoding=UTF-8放在最后,用&连接其他参数(如&serverTimezone=GMT%2B8) - 使用 MySQL 8.0+ 和新驱动(
mysql-connector-j 8.x),还可额外加上serverTimezone和allowPublicKeyRetrieval=true等,但字符集参数仍不可省略 - 若项目用 Spring Boot,可在
application.properties中这样写:
spring.datasource.url=jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
这个配置能解决哪些乱码?
它主要解决的是连接层的乱码,包括:
- Java 程序向数据库 插入中文变成问号(?)或方块
- 从数据库 查询出的中文在 Java 中显示为乱码(如 、æ³、ã®)
- PreparedStatement 执行含中文的 SQL 语句失败或内容错乱
但要注意:它不能替代数据库本身的字符集设置。如果 MySQL 服务端默认是 latin1,且库/表/字段不是 utf8mb4,即使 URL 加了参数,也可能出现存储截断或排序异常。所以建议配合服务端配置一起使用。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











