Skip to content
鼓励作者:欢迎打赏犒劳

08-mysql时区

查看mysql的时区

要查看 MySQL 当前的时区设置,可以使用以下几种 SQL 命令:

1. 查看全局和会话时区变量

sql
-- 查看全局时区设置(影响所有新连接)
SELECT @@global.time_zone;

-- 查看当前会话的时区设置(只影响当前连接)
SELECT @@session.time_zone;

2. 查看所有与时区相关的系统变量

这个命令会显示更详细的信息,包括系统时区和 MySQL 使用的时区。

sql
SHOW VARIABLES LIKE '%time_zone%';

执行结果通常会显示如下信息:

Variable_nameValue
time_zoneSYSTEM
system_time_zoneCST
......
  • time_zone: 表示 MySQL 服务器当前使用的时区。如果值为 SYSTEM,表示 MySQL 使用的是操作系统的时区。
  • system_time_zone: 表示 MySQL 服务器启动时检测到的系统时区(如 CST、EDT 等)。

3. 验证当前时间(间接判断时区)

你也可以通过查看当前时间来辅助判断时区是否正确:

sql
SELECT NOW();
-- 或
SELECT CURRENT_TIMESTAMP;

将结果显示的时间与你本地时间对比,即可大致判断时区设置是否符合预期。


总结:最常用和全面的命令是:

sql
SHOW VARIABLES LIKE '%time_zone%';

它可以一次性查看所有关键的时区配置。

修改mysql的时区

要将 MySQL 的时区从跟随系统时间(当前为 UTC+8)修改为 UTC 时间(即 UTC+0),你可以按照以下步骤操作。


✅ 目标

  • 将 MySQL 的 time_zone 设置为 '+00:00'(即 UTC)
  • 确保全局和新连接都使用 UTC 时区

🔧 方法一:通过配置文件永久修改(推荐)

这是最稳妥、持久的方式,避免每次重启后恢复默认。

1. 编辑 MySQL 配置文件

通常位于:

  • Linux: /etc/my.cnf/etc/mysql/my.cnf/etc/mysql/mysql.conf.d/mysqld.cnf
  • Windows: my.ini

找到 [mysqld] 段落,添加或修改:

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

如果你想设置为其他时区,比如北京时间 UTC+8,可以写 '+08:00''Asia/Shanghai'

📌 注意:如果你的系统没有启用带时区信息的数据库(如 mysql.time_zone 表为空),建议使用 ±HH:MM 格式而不是时区名称(如 'UTC''SYSTEM')。

2. 重启 MySQL 服务

让配置生效:

bash
# Linux 常见命令(根据你的系统选择)
sudo systemctl restart mysql
# 或
sudo service mysql restart
cmd
:: Windows(以管理员运行)
net stop mysql
net start mysql

3. 验证设置是否成功

登录 MySQL 后执行:

sql
SHOW VARIABLES LIKE '%time_zone%';

你应该看到输出类似:

Variable_nameValue
time_zone+00:00
system_time_zoneCST
......

再查看当前时间是否符合 UTC 时间:

sql
SELECT NOW(); -- 应该显示 UTC 时间(比北京时间慢8小时)

🚫 方法二:临时修改(不推荐用于生产环境)

这种方式在 MySQL 重启后会失效。

sql
-- 设置全局时区为 UTC
SET GLOBAL time_zone = '+00:00';

-- 可选:设置会话时区(对当前连接有效)
SET time_zone = '+00:00';

⚠️ 注意:此方法只在当前运行期间有效,一旦 MySQL 重启就会恢复原状。适用于测试场景。


❗ 注意事项

  1. 确保时区支持已加载

    • 如果你打算使用命名时区(如 'UTC', 'Asia/Shanghai'),需要确保 MySQL 的时区表已初始化。
    • 可通过命令检查:
      sql
      SELECT * FROM mysql.time_zone_name WHERE Name = 'UTC';
    • 若未初始化,请使用 mysql_tzinfo_to_sql 工具导入系统时区数据。
  2. 应用兼容性

    • 修改数据库时区可能影响应用程序的时间处理逻辑,尤其是依赖 NOW()CURDATE() 等函数的地方。
    • 建议统一应用、数据库、服务器的时区策略。
  3. 已有时间数据不受影响

    • 修改 time_zone 不会影响已经存储的 DATETIME 类型数据(它不带时区)。
    • TIMESTAMP 类型有影响(因为它会根据当前时区做转换),请谨慎操作。

✅ 总结

操作命令
永久设置为 UTCmy.cnf 中添加 default-time-zone = '+00:00'
重启服务systemctl restart mysql
验证SHOW VARIABLES LIKE '%time_zone%'

✅ 推荐使用 配置文件 + 重启服务 的方式,确保稳定性和持久性。

如有转载或 CV 的请标注本站原文地址