mysql - 如何设置 MySQL 的时区?

在一台服务器上,当我运行时:

mysql> select now();
+---------------------+
| now()               |
+---------------------+
| 2009-05-30 16:54:29 |
+---------------------+
1 row in set (0.00 sec)

在另一台服务器上:

mysql> select now();
+---------------------+
| now()               |
+---------------------+
| 2009-05-30 20:01:43 |
+---------------------+
1 row in set (0.00 sec)

最佳答案

我认为这可能有用:

在 MySQL 中可能设置时区的三个地方:

在 [mysqld] 部分的文件“my.cnf”中

default-time-zone='+00:00'

@@global.time_zone 变量

查看它们设置的值:

SELECT @@global.time_zone;

要为其设置一个值,请使用其中一个:

SET GLOBAL time_zone = '+8:00';
SET GLOBAL time_zone = 'Europe/Helsinki';
SET @@global.time_zone = '+00:00';

(使用像“欧洲/赫尔辛基”这样的命名时区意味着您必须正确填充时区表。)

请记住,+02:00 是一个偏移量。 Europe/Berlin 是一个时区(有两个偏移量),CEST 是对应于特定偏移量的时钟时间。

@@session.time_zone 变量

SELECT @@session.time_zone;

要设置它,请使用其中一个:

SET time_zone = 'Europe/Helsinki';
SET time_zone = "+00:00";
SET @@session.time_zone = "+00:00";

两者都可能返回 SYSTEM,这意味着它们使用 my.cnf 中设置的时区。

要使时区名称起作用,您必须设置您的时区信息表,需要填充:http://dev.mysql.com/doc/refman/5.1/en/time-zone-support.html .我还提到了如何在 this answer 中填充这些表。 .

获取当前时区偏移为TIME

SELECT TIMEDIFF(NOW(), UTC_TIMESTAMP);

如果您的时区是 +2:00,它将返回 02:00:00。

获取当前 UNIX 时间戳:

SELECT UNIX_TIMESTAMP();
SELECT UNIX_TIMESTAMP(NOW());

获取时间戳列作为 UNIX 时间戳

SELECT UNIX_TIMESTAMP(`timestamp`) FROM `table_name`

获取 UTC 日期时间列作为 UNIX 时间戳

SELECT UNIX_TIMESTAMP(CONVERT_TZ(`utc_datetime`, '+00:00', @@session.time_zone)) FROM `table_name`

注意:更改时区不会更改存储的日期时间或时间戳,但它会为现有的时间戳列显示不同的日期时间,因为它们在内部存储为 UTC 时间戳并在当前 MySQL 中外部显示时区。

我在这里做了一个备忘单:Should MySQL have its timezone set to UTC?

https://stackoverflow.com/questions/930900/

相关文章:

mysql - MySQL VARCHAR 的最大大小是多少?

mysql - 如何更改 max_allowed_pa​​cket 大小

mysql - 对于 Homebrew mysql 安装,my.cnf 在哪里?

mysql - 我应该如何解决 MySQL 中的 --secure-file-priv 问题?

mysql - 错误 1396 (HY000) : Operation CREATE USER fa

mysql - 错误 2006 (HY000) : MySQL server has gone aw

mysql - 如何将 CSV 文件导入 MySQL 表?

mysql - MySQL 中的 utf8mb4 和 utf8 字符集有什么区别?

sql - 从一个表中查找另一个表中不存在的记录

MySQL - 如何按字符串长度选择数据