如何设置mysql时区_mysql时区配置方法

来源:这里教程网 时间:2026-02-28 20:33:04 作者:

MySQL 默认使用系统时区,但实际开发中常需统一为 UTC+8(如北京时间),否则时间字段(如

NOW()
CURRENT_TIMESTAMP
)可能与业务预期不符。关键在于区分全局时区会话时区,并确保服务重启后仍生效。

查看当前 MySQL 时区设置

连接 MySQL 后执行:

SELECT @@global.time_zone, @@session.time_zone;

常见返回:

SYSTEM
表示跟随系统时区;
+00:00
UTC
表示 UTC;
+08:00
表示东八区。

也可查系统时区确认基准:

SELECT TIMEDIFF(NOW(), UTC_TIMESTAMP);

临时修改(重启失效)

仅对当前会话或全局生效,适合测试:

修改当前会话时区:
SET time_zone = '+08:00';
修改全局时区(影响新连接):
SET GLOBAL time_zone = '+08:00';

⚠️ 注意:普通用户需

SYSTEM_VARIABLES_ADMIN
权限;修改后已有连接不受影响。

永久配置(推荐)

编辑 MySQL 配置文件(通常是

/etc/my.cnf
/etc/mysql/mysql.conf.d/mysqld.cnf
),在
[mysqld]
段下添加:

[mysqld]
default-time-zone = '+08:00'

保存后重启 MySQL 服务:

Linux(systemd):
sudo systemctl restart mysql
sudo systemctl restart mysqld
macOS(Homebrew):
brew services restart mysql

重启后执行

SELECT @@global.time_zone;
应返回
+08:00

补充说明:避免时区混乱的要点

MySQL 的

TIMESTAMP
类型会自动按当前时区转换存储/读取,而
DATETIME
不做转换——存什么读什么。因此:

若业务依赖本地时间显示,建议统一设为
+08:00
并用
TIMESTAMP
若需跨时区精确记录原始时间(如日志),建议用
DATETIME
+ 应用层统一转 UTC 存储
JDBC 连接 URL 中可显式指定时区,如:
?serverTimezone=Asia/Shanghai
,避免驱动误判

不复杂但容易忽略。

相关推荐