如何设置MySQL的时区?

在一台服务器上运行时:

mysql>现在选择();
+---------------------+
|现在()|
+---------------------+
| 2009-05-30 16:54:29 |
+---------------------+
一行一组(0.00秒)

在另一台服务器上:

mysql>现在选择();
+---------------------+
|现在()|
+---------------------+
| 2009-05-30 20:01:43 |
+---------------------+
一行一组(0.00秒)

我认为这可能有用:

MySQL中有三个可以设置时区的地方:

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

默认时区='+00:00'

@@全局时区变量

要查看它们设置为什么值,请执行以下操作:

选择@@global.time\u时区;

要为其设置值,请使用以下任一选项:

设置全球时区='+8:00';
设置全球时区='欧洲/赫尔辛基';
设置@@global.time_zone='+00:00';

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

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

@@session.time\u区域变量

选择@@session.time\u区域;

要设置它,请使用以下任一选项:

设置时区='欧洲/赫尔辛基';
设置时区=“+00:00”;
设置@@session.time_zone=“+00:00”;

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

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

将当前时区偏移量设置为TIME

选择TIMEDIFF(现在(),UTC_时间戳);

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

要获取当前UNIX时间戳,请执行以下操作:

选择UNIX_TIMESTAMP();
选择UNIX_时间戳(NOW());

以UNIX时间戳的形式获取时间戳列

从'table\u name'中选择UNIX\u时间戳('TIMESTAMP')`

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

从'table\u name'中选择UNIX\u时间戳(转换\u TZ('utc\u datetime','+00:00',@@session.time\u zone))`

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

我在这里做了一个备忘:MySQL应该将其时区设置为UTC吗

发表评论