dushaoshuai / dushaoshuai.github.io

https://www.shuai.host
0 stars 0 forks source link

MySQL: specify a time zone offset in time values #56

Open dushaoshuai opened 1 year ago

dushaoshuai commented 1 year ago

格式

从 MySQL 8.0.19 开始,向 DATETIME 和 TIMESTAMP 列中插入数据时,可以指定时区偏移量。偏移量的范围是 [-13:59, +14:00],并且有一些格式上的要求,具体可以查看文档。带时区偏移量的时间值格式大概是这样:

'2013-12-23 23:34:45+08:00'
'2013-12-23 23:34:45-10:34'

先创建一张表:

CREATE TABLE `tztest` (
    id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,
    ts TIMESTAMP NOT NULL,
    dt DATETIME NOT NULL
);

插入数据:

mysql> SELECT @@system_time_zone;
+--------------------+
| @@system_time_zone |
+--------------------+
| CST                |
+--------------------+
1 row in set (0.00 sec)

mysql> INSERT INTO `tztest` (`ts`, `dt`) VALUES 
    -> ('2005-01-23 23:23:23', '2005-01-23 23:23:23'),
    -> ('2005-01-23 23:23:23+00:00', '2005-01-23 23:23:23+00:00'),
    -> ('2005-01-23 23:23:23+09:00', '2005-01-23 23:23:23+09:00');
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> SELECT * FROM `tztest`;
+----+---------------------+---------------------+
| id | ts                  | dt                  |
+----+---------------------+---------------------+
|  1 | 2005-01-23 23:23:23 | 2005-01-23 23:23:23 |
|  2 | 2005-01-24 07:23:23 | 2005-01-24 07:23:23 |
|  3 | 2005-01-23 22:23:23 | 2005-01-23 22:23:23 |
+----+---------------------+---------------------+
3 rows in set (0.00 sec)

注意查询出来的时间值并不包含时区偏移量,这个时间值是在时区 @@system_time_zone 中的时间。

参见

specify a time zone offset