MySQL配稳需四点齐备:能连上、不报错、字段不乱码、时区不偏移;须确认服务启动、URL含serverTimezone和characterEncoding、驱动类名正确、数据库字符集为utf8mb4。

能连上、不报错、字段不乱码、时区不偏移——这四点齐了,MySQL就算配稳了。其他花哨配置都是锦上添花,先过这关再说。
确认 MySQL 服务已启动且端口可访问
很多“连不上”的问题根本不是 Spring Boot 配错了,而是 MySQL 没跑起来,或者防火墙/端口被占。
- 在命令行执行
mysql -u root -p,能登录说明服务正常;输错密码或提示ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost'就得先查服务 - Windows 下运行
net start | findstr MySQL,Linux/macOS 用systemctl status mysql或ps aux | grep mysqld - 默认端口是
3306,如果改过,application.properties里的url必须同步改,比如jdbc:mysql://localhost:3307/mydb - Navicat / IDEA Database 工具能连上,不代表 Spring Boot 就能连——它们可能用了不同驱动或协议,别拿 GUI 连通当依据
application.properties 中的 url 必须带时区和编码参数
漏掉 serverTimezone 或 characterEncoding 是最常导致“能连但查出来中文是问号”“时间字段比实际快8小时”的原因。
- 正确写法(MySQL 8+ 推荐):
spring.datasource.url=jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false -
&是 XML/properties 转义写法,不是&;少一个;或多一个空格都会让整个 URL 解析失败 - MySQL 5.7 可用
GMT%2B8,但Asia/Shanghai更明确、兼容性更好 -
useSSL=false在本地开发可加,生产环境应配 SSL 或至少设为requireSSL=true
driver-class-name 必须用新驱动类名
Spring Boot 2.4+ 和 MySQL 8.x 默认要求使用 com.mysql.cj.jdbc.Driver,旧的 com.mysql.jdbc.Driver 会触发警告甚至拒绝加载。
- 检查
pom.xml中mysql-connector-j版本:MySQL 8.x 对应8.0.33或更高;MySQL 5.7 建议锁死5.1.49 - 即使没显式配置
driver-class-name,Spring Boot 也会自动推断——但一旦你写了旧类名,就会覆盖自动推断,直接报错 - 报错典型信息:
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver或Loading class `com.mysql.jdbc.Driver'. This is deprecated - 安全起见,显式写上:
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
用户名密码错误时,错误日志藏得深,别只看 Connection refused
真正的问题往往不在连接阶段,而在认证环节。Spring Boot 默认把认证失败日志级别设为 WARN 或 DEBUG,控制台可能只打印一行模糊提示。
- 如果看到
Access denied for user 'root'@'localhost',说明账号密码错,或用户没权限访问目标库 - MySQL 8.0+ 默认用
caching_sha2_password插件,老驱动不兼容;可在 MySQL 中执行:ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password'; - 确保
spring.datasource.username和spring.datasource.password没多余空格——YAML 容易缩进出错,properties 更稳妥 - 临时加日志开关:
logging.level.com.zaxxer.hikari=DEBUG,能看到真实连接尝试过程
最易忽略的是数据库字符集本身不是 utf8mb4。哪怕 URL 写对了,建库时用的是 latin1,照样存不了 emoji、显示乱码。建库务必加上:CREATE DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;


















