MySQL 5.6 timestamp和datetime區別

feelpurple發表於2017-02-13
MySQL會根據當前時區轉化TIMESTAMP值,在查詢時候會根據當前時區來處理。

mysql> create table test2(a int(20));

Query OK, 0 rows affected (0.07 sec)

mysql> insert into test2 values(1466929145);
Query OK, 1 row affected (0.00 sec)

mysql> select * from test2;
+------------+
| a          |
+------------+
| 1466929145 |
+------------+
1 row in set (0.00 sec)

mysql> select from_unixtime(a) from test2;
+---------------------+
| from_unixtime(a)    |
+---------------------+
| 2016-06-26 08:19:05 |
+---------------------+
1 row in set (0.00 sec)

mysql> insert into test2 values(14669291450);
Query OK, 1 row affected, 1 warning (0.00 sec)

mysql> select from_unixtime(a) from test2;
+---------------------+
| from_unixtime(a)    |
+---------------------+
| 2016-06-26 08:19:05 |
| 2038-01-19 03:14:07 |
+---------------------+
2 rows in set (0.00 sec)

mysql> insert into test2 values(14669291450);
Query OK, 1 row affected, 1 warning (0.00 sec)

mysql> show warnings;
+---------+------+--------------------------------------------+
| Level   | Code | Message                                    |
+---------+------+--------------------------------------------+
| Warning | 1264 | Out of range value for column 'a' at row 1 |
+---------+------+--------------------------------------------+
1 row in set (0.00 sec)

mysql> select from_unixtime(a) from test2;
+---------------------+
| from_unixtime(a)    |
+---------------------+
| 2016-06-26 08:19:05 |
| 2038-01-19 03:14:07 |
| 2038-01-19 03:14:07 |
+---------------------+
3 rows in set (0.00 sec)

檢視當前時區
mysql> show variables like 'time_zone';
+---------------+--------+
| Variable_name | Value  |
+---------------+--------+
| time_zone     | +00:00 |
+---------------+--------+
1 row in set (0.00 sec)

更改會話時區引數後,可以看到查詢出來的時間發生了變化
mysql> set session time_zone='+01:00';
Query OK, 0 rows affected (0.00 sec)

mysql> select from_unixtime(a) from test2;
+---------------------+
| from_unixtime(a)    |
+---------------------+
| 2016-06-26 09:19:05 |
| 2038-01-19 04:14:07 |
| 2038-01-19 04:14:07 |
+---------------------+
3 rows in set (0.00 sec)

datetime不受時區的影響
mysql> create table test3(a datetime);
Query OK, 0 rows affected (0.10 sec)

mysql> select * from test3;
Empty set (0.00 sec)

mysql> insert into test3 values(now());
Query OK, 1 row affected (0.00 sec)

mysql> commit;
Query OK, 0 rows affected (0.02 sec)

mysql> select * from test3;
+---------------------+
| a                   |
+---------------------+
| 2017-02-13 10:02:20 |
+---------------------+
1 row in set (0.00 sec)

mysql> set session time_zone='+10:00';
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like 'time_zone';
+---------------+--------+
| Variable_name | Value  |
+---------------+--------+
| time_zone     | +10:00 |
+---------------+--------+
1 row in set (0.00 sec)

mysql> select * from test3;
+---------------------+
| a                   |
+---------------------+
| 2017-02-13 10:02:20 |
+---------------------+
1 row in set (0.00 sec)

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26506993/viewspace-2133471/,如需轉載,請註明出處,否則將追究法律責任。

相關文章