我认为这可能会有用:
MySQL中可能设置时区的三个位置:
在文件“my.cnf”中的[mysqld]部分
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';
使用类似于“Europe/Helsinki”这样的命名时区意味着您必须正确填充时区表。
请记住,+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。我还在这个答案中介绍了如何填充这些表。
要获取当前时区偏移量,可以使用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时区外部显示。
我在这里制作了一个备忘单: MySQL是否应该将其时区设置为UTC?
sudo dpkg-reconfigure tzdata
并使用sudo service mysql restart
重新启动mysql。 - Avatar