我认为这可能有用:
在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';
(使用诸如“ 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());
将timestamp列获取为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`
注意:更改时区不会更改存储的datetime或timestamp,但是它将为现有时间戳列显示不同的日期时间,因为它们在内部存储为UTC时间戳,并在外部显示在当前MySQL时区中。
我在这里做了一个备忘单:MySQL是否应该将其时区设置为UTC?
ntp
-看看最适合您的!”