国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > MySQL > 正文

MySQL timestamp的類型與時區(qū)實例詳解

2024-07-24 13:11:17
字體:
供稿:網(wǎng)友

 MySQL timestamp的類型與時區(qū)

MySQL的timestamp類型時間范圍between '1970-01-01 00:00:01' and '2038-01-19 03:14:07',超出這個范圍則值記錄為'0000-00-00 00:00:00',該類型的一個重要特點就是保存的時間與時區(qū)密切相關(guān),上述所說的時間范圍是UTC(Universal Time Coordinated)標準,指的是經(jīng)度0度上的標準時間,我國日常生活中時區(qū)以首都北京所處的東半球第8區(qū)為基準,統(tǒng)一使用東8區(qū)時間(俗稱北京時間),比UTC要早8個小時,服務(wù)器的時區(qū)設(shè)置也遵照此標準,因此對應(yīng)過來timestamp的時間范圍則應(yīng)校準為'1970-01-01 08:00:01' and '2038-01-19 11:14:07',也就是說東八區(qū)的1970-1-1 08:00:01等同于UTC 1970-1-1 00:00:01。

需要特點注意,timestamp類型的時間不僅僅與寫入記錄時的時區(qū)有關(guān),顯示時也與時區(qū)有關(guān),例如:

mysql> desc j1_dt;+-------+-----------+------+-----+-------------------+-------+| Field | Type   | Null | Key | Default      | Extra |+-------+-----------+------+-----+-------------------+-------+| dt  | timestamp | NO  |   | CURRENT_TIMESTAMP |    | +-------+-----------+------+-----+-------------------+-------+1 row in set (0.00 sec)mysql> insert into j1_dt values ('1970-01-01 08:00:01');Query OK, 1 row affected (0.00 sec)mysql> select * from j1_dt;+---------------------+| dt         |+---------------------+| 1970-01-01 08:00:01 | +---------------------+1 row in set (0.00 sec)mysql> set time_zone='+0:00';Query OK, 0 rows affected (0.00 sec)mysql> select * from j1_dt;+---------------------+| dt         |+---------------------+| 1970-01-01 00:00:01 | +---------------------+1 row in set (0.00 sec)mysql> set time_zone='+1:00';Query OK, 0 rows affected (0.00 sec)mysql> select * from j1_dt;+---------------------+| dt         |+---------------------+| 1970-01-01 01:00:01 | +---------------------+1 row in set (0.00 sec)

如上述所示,根據(jù)時區(qū)的不同,顯示的日期也是不一樣的,這正是timestamp類型在MySQL日期類型中獨有的時區(qū)特點。

如果向timestamp類型列插入的值超出了指定范圍,則實際實際保存的值為'0000-00-00 00:00:00',并觸發(fā)一個警告信息:

mysql> set time_zone='+8:00';Query OK, 0 rows affected (0.00 sec)mysql> select * from j1_dt;+---------------------+| dt         |+---------------------+| 1970-01-01 08:00:01 | +---------------------+1 row in set (0.00 sec)mysql> insert into j1_dt values ('1970-01-01 00:00:01');Query OK, 1 row affected, 1 warning (0.00 sec)mysql> show warnings;+---------+------+------------------------------------------------------+| Level  | Code | Message                       |+---------+------+------------------------------------------------------+| Warning | 1264 | Out of range value adjusted for column 'dt' at row 1 | +---------+------+------------------------------------------------------+1 row in set (0.00 sec)mysql> select * from j1_dt;+---------------------+| dt         |+---------------------+| 1970-01-01 08:00:01 | | 0000-00-00 00:00:00 | +---------------------+2 rows in set (0.00 sec)

觸發(fā)的警告信息在MySQL層面僅是個警告而并非錯誤,前端應(yīng)用的try catch捕獲不到,不過,由于實際寫入的數(shù)據(jù)并非期望值,還是有可能埋下一些隱患,這些隱患一旦顯露,就有可能觸發(fā)前端應(yīng)用出現(xiàn)異常。

  對于timestamp類型,在實際應(yīng)用中務(wù)必理解時區(qū)的概念,在設(shè)置timestamp列默認值,及實際賦值時務(wù)必明確寫入的值實際保存時的狀態(tài),盡量避免埋入隱患。對于現(xiàn)有已經(jīng)出錯的記錄,可以考慮通過批量UPDATE及修改表結(jié)構(gòu)的方式予以處理。

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!


注:相關(guān)教程知識閱讀請移步到MYSQL教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 从江县| 张家港市| 三门县| 黑龙江省| 凭祥市| 凤庆县| 浦北县| 商河县| 德江县| 牡丹江市| 邯郸县| 保定市| 万年县| 西青区| 麟游县| 航空| 和田市| 高淳县| 那坡县| 阳西县| 福海县| 延安市| 中方县| 罗田县| 抚远县| 同江市| 西城区| 易门县| 金坛市| 云安县| 奉贤区| 武隆县| 绍兴县| 五台县| 高州市| 罗山县| 乌拉特中旗| 洛南县| 禹城市| 海安县| 福贡县|