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

10次阅读

MySQL 默认使用系统时区,需统一设为 UTC+ 8 以避免时间偏差;应通过配置文件永久设置 default-time-zone=’+08:00’ 并重启服务,同时区分 TIMESTAMP(自动时区转换)与 DATETIME(无转换)的适用场景。

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

MySQL 默认使用系统时区,但实际开发中常需统一为 UTC+8(如北京时间),否则时间字段(如 NOW()CURRENT_TIMESTAMP)可能与业务预期不符。关键在于区分 全局时区 会话时区,并确保服务重启后仍生效。

查看当前 MySQL 时区设置

连接 MySQL 后执行:

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

常见返回:SYSTEM 表示跟随系统时区;+00:00UTC 表示 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 mysqlsudo 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,避免驱动误判

不复杂但容易忽略。

星耀云
版权声明:本站原创文章,由 星耀云 2025-12-23发表,共计1029字。
转载说明:转载本网站任何内容,请按照转载方式正确书写本站原文地址。本站提供的一切软件、教程和内容信息仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。
text=ZqhQzanResources