如题:启动 Spring 项目报错:java.sql.SQLException: The server time zone value 'Öйú±ê×¼' is unrecognized or represents more than one time zone,数据库服务器时区出现乱码。

解决方法:

  • 修改数据库的默认时区

以设置 MySQL 的时区为例,MySQL 默认的时区是 UTC 时区:

查看当前 MySQL 时区(登录到 MySQL 服务器):show variables like '%time_zone%';

查看 MySQL 时区
查看 MySQL 时区

修改当前 MySQL 时区:

(1)永久的修改:修改 MySQL 的配置文件,添加:default-time-zone='+08:00',重启 MySQL 生效

(2)临时的修改:执行 MySQL 命令 set global time_zone='+08:00',立即生效,重启 MySQL 后失效

  • Spring 数据库连接 url 增加时区参数

?serverTimezone=GMT%2B8 表示当前服务器时区为东八区。

完整 url:jdbc:mysql://${MYSQL_HOST:localhost}:3306/db_example?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8

尝试过使用 Asia/Shangha,但启动报错:java.sql.SQLException: No timezone mapping entry for 'Asia/Shangha'

尝试过使用 UTC,启动正常,但要考虑到 UTC 与东八区差了八个小时。

参考:解决 java.sql.SQLException: The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time zone