MySQL时间戳类型和时区实例详细解决方案
MySQL的时间戳'1970-01-01 00:00:01'and型时间范围'2038-01-19 03:14:07之间,超出范围的值被记录为'0000-00-00 00:00:00,时间和时区是这种类型的一个重要特点是保存密切相关,时间范围是UTC(通用协调时间)标准,是指标准时间东经0度的时间日常生活中,我们在东半球的北京地区的资本在第八为基准,统一时间东8区(俗称北京时间早8个小时),比UTC,服务器时区设置也按照这一标准,所以在时间区间对应的时间戳进行校准对于'1970-01-01 08:00:01和'2038-01-19 11:14:07是的,1970-1-1 08:00:01东八区相当于UTC 1970-1-1 00:00:01。
需要注意的是,时间戳类型的时间不仅与写入记录时的时区有关,而且当显示与时区相关时,例如:
>描述j1_dt MySQL;
+ + + + ------- ----------- ------ ----- ------------------- ------- + + +
场型空| | | |关键|默认|额外|
+ + + + ------- ----------- ------ ----- ------------------- ------- + + +
DT的时间戳不| | | | | current_timestamp | |
+ + + + ------- ----------- ------ ----- ------------------- ------- + + +
1行集(0秒)
MySQL >插入j1_dt值('1970-01-01 08:00:01);
查询OK,1行受影响(0秒)
MySQL SELECT * FROM j1_dt >;
--------------------- + +
| DT |
--------------------- + +
08:00:01 | | 1970-01-01
--------------------- + +
1行集(0秒)
MySQL >设置time_zone = + 0;
查询OK,0行受影响(0秒)
MySQL SELECT * FROM j1_dt >;
--------------------- + +
| DT |
--------------------- + +
| | 1970-01-01 00:00:01
--------------------- + +
1行集(0秒)
MySQL >设置time_zone = +一点;
查询OK,0行受影响(0秒)
MySQL SELECT * FROM j1_dt >;
--------------------- + +
| DT |
--------------------- + +
01:00:01 | | 1970-01-01
--------------------- + +
1行集(0秒)
如上所示,日期也不同于时区,这是MySQL日期类型中时间戳类型的唯一时区特性。
如果插入时间戳类型列的值超出了规定的范围内,实际值实际是'0000-00-00 00:00:00'and触发一个警告信息:
MySQL >设置time_zone = + 8;
查询OK,0行受影响(0秒)
MySQL SELECT * FROM j1_dt >;
--------------------- + +
| DT |
--------------------- + +
08:00:01 | | 1970-01-01
--------------------- + +
1行集(0秒)
MySQL >插入j1_dt值('1970-01-01 00:00:01);
查询OK,1行受影响,1警告(0秒)
显示警告;
+ + + + --------- ------ ------------------------------------------------------
级别代码信息| | | |
+ + + + --------- ------ ------------------------------------------------------
|警告| |越界值1264调整为1 | column'dt'at排
+ + + + --------- ------ ------------------------------------------------------
1行集(0秒)
MySQL SELECT * FROM j1_dt >;
--------------------- + +
| DT |
--------------------- + +
08:00:01 | | 1970-01-01
0000-00-00 | | 00:00:00
--------------------- + +
2行(0秒)
警告信息只是一个触发器警告,在MySQL级别是没有错的,尝试捕捉前端应用程序来捕获,然而,由于实际的书面数据不是预期值,可能仍存在某些风险下,这些风险一旦暴露,就有可能触发异常的前端应用程序。
对于时间戳类型,有必要在实际应用中理解时区的概念。当设置时间戳列默认值和实际赋值时,需要显式地写出实际存储状态的值,并尽量避免出现隐患,对于已出现错误的记录,可以通过对表结构的批处理更新和修改来考虑。
谢谢你的阅读。我希望你能帮助你,谢谢你对这个站的支持。