一、如何设置 MySQL 时区
1. 查看时区命令
在MySQL中,设置时区涉及到全局时区、会话时区等不同层次的设置,以下是一些关键的命令:
- 查看时区信息
SHOW VARIABLES LIKE '%time_zone%';结果中的time_zone表示当前的时区,而system_time_zone是 MySQL 服务启动时读取的操作系统时区。 另一种方式是使用:SELECT @@GLOBAL.time_zone, @@SESSION.time_zone; - 设置会话时区
SET time_zone='+8:00';这只在当前会话中生效,不需要重新登录,关闭窗口后设置失效。 - 设置全局时区
SET GLOBAL time_zone='+8:00';这对整个 MySQL 服务生效,需要重新连接MySQL服务才会生效,而不需要重启服务。 - 修改 MySQL 配置文件永久设置时区
在 MySQL 配置文件(通常是my.cnf)的[mysqld]段中添加:[mysqld] default-time-zone=+08:00需要重启 MySQL 服务后才会生效。
2. 查看并解读命令结果
执行 SHOW VARIABLES LIKE '%time_zone%'; 命令会返回两行记录,其中 time_zone 的值表示当前时区。建议修改时区时只关注 time_zone,忽略 system_time_zone。
- 如果
time_zone值是SYSTEM,表示与system_time_zone保持一致。 - 不建议将
time_zone设置成SYSTEM,因为可能导致与 Java 时间处理的不一致。
3. 探讨一个问题
在更改操作系统时区后,MySQL 的 time_zone 是否会随之变化?
实测结果表明,time_zone 的值实际上是跟随 system_time_zone 变量的变化而变化,而不是操作系统的变化。
二、恶心的CST(修改time_zone改成非SYSTEM!)
CST 是一个容易混淆的时区概念,因为它可能代表不同的时区,如美国标准时间、澳大利亚标准时间、中国标准时间和古巴标准时间。
在 MySQL 中,CST 被解释为 China Standard Time(GMT+8),但在 Java 中,它被解释为 Central Standard Time (USA)(GMT-6)。这可能导致一些 bug。
解决办法:
- 将 MySQL 的
time_zone设置为非SYSTEM,例如+08:00。 - 在程序连接 MySQL 时,jdbcUrl 中带上时区信息,例如
jdbc:mysql://localhost:3306/test?serverTimezone=Asia/Shanghai。
以上是关于 MySQL 时区设置的一些建议和注意事项,希望能帮助您更好地管理 MySQL 数据库的时区设置。


苏公网安备32021302001419号