前言
话说工作十多年,mysql 还真没用几年。起初是外企银行,无法直接接触到 DB;后来一直从事架构方面,也多是解决问题为主。
这次搭建海外机房,围绕时区大家做了一番讨论。不说最终的结果是什么,期间有同事认为 DB 返回的是 UTC 时间。
这里简单做个验证,顺便看下时区的问题到底是如何处理。
环境
openjdk version “1.8.0_242”
mysql-connector-Java “8.0.20”
mysql “5.7” 时区 TZ=Europe/London
本地时区 GMT+8
创建个简单的库test及表user, 表结构如下: CREATE TABLE `user` (
`name` varchar(50) NOT NULL,
`birth_date` timestamp NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=latin1
插入一条测试数据: mysql> insert into `user`
-> values ('Tom', time('2020-05-15 08:00:00'));
Query OK, 1 row affected (0.01 sec)
mysql> select * from user;
+------+---------------------+
| name | birth_date |
+------+---------------------+
| Tom | 2020-05-14 08:00:00 |
+------+---------------------+
1 row in set (0.00 sec)
测试代码: Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test?useSSL=false", "root", "root");
Statement stmt = conn.createStatement();
stmt.execute("select *