<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
字串佔用的空間更大!
字串儲存的日期比較效率比較低(逐個字元進行比對),無法用日期相關的 API 進行計算和比較。
Datetime 和 Timestamp 是 MySQL 提供的兩種比較相似的儲存時間的資料型別。
他們兩者究竟該如何選擇呢?
通常我們都會首選 Timestamp
DateTime 型別是沒有時區資訊的(時區無關)
當你的時區更換之後,比如你的伺服器更換地址或者更換使用者端連線時區設定的話,就會導致你從資料庫中讀出的時間錯誤。
Timestamp 和時區有關。
Timestamp 型別欄位的值會隨著伺服器時區的變化而變化,自動換算成相應的時間,說簡單點就是在不同時區,查詢到同一個條記錄此欄位的值會不一樣。
下面實際演示一下!
建表 SQL 語句:
CREATE TABLE `time_zone_test` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `date_time` datetime DEFAULT NULL, `time_stamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
插入資料:
INSERT INTO time_zone_test(date_time,time_stamp) VALUES(NOW(),NOW());
檢視資料:
select dsqlate_time,time_stamp from time_zone_test;
結果:
+---------------------+---------------------+
| date_time | time_stamp |
+---------------------+---------------------+
| 2020-01-11 09:53:32 | 2020-01-11 09:53:32 |
+---------------------+---------------------+
修改當前對談的時區:
set time_zone='+8:00';
再次檢視資料:
+---------------------+---------------------+
| date_time | time_stamp |
+---------------------+---------------------+
| 2020-01-11 09:53:32 | 2020-01-11 17:53:32 |
+---------------------+---------------------+
擴充套件: 一些關於 MySQL 時區設定的一個常用 sql 命令
1. 檢視當前對談時區
SELECT @@session.time_zone;
2. 設定當前對談時區
SET time_zone = 'Europe/Helsinki'; SET time_zone = "+00:00";
3. 資料庫全域性時區設定
SELECT @@global.time_zone;
4. 設定全域性時區
SET GLOBAL time_zone = '+8:00'; SET GLOBAL time_zone = 'Europe/Helsinki';
Timestamp 只需要使用 4 個位元組的儲存空間,但是 DateTime 需要耗費 8 個位元組的儲存空間。但是,這樣同樣造成了一個問題,Timestamp 表示的時間範圍更小。
DateTime
:1000-01-01 00:00:00 ~ 9999-12-31 23:59:59Timestamp
: 1970-01-01 00:00:01 ~ 2037-12-31 23:59:59Timestamp 在不同版本的 MySQL 中有細微差別。
下圖是 MySQL 5.6 版本中日期型別所佔的儲存空間:
可以看出 5.6.4 之後的 MySQL 多出了一個需要 0 ~ 3 位元組的小數位。Datatime 和 Timestamp 會有幾種不同的儲存空間佔用。
為了方便,本文我們還是預設 Timestamp 只需要使用 4 個位元組的儲存空間,但是 DateTime 需要耗費 8 個位元組的儲存空間。
很多時候,我們也會使用 int 或者 bigint 型別的數值也就是時間戳來表示時間。
這種儲存方式的具有 Timestamp 型別的所具有一些優點,並且使用它的進行日期排序以及對比等操作的效率會更高,跨系統也很方便,畢竟只是存放的數值。缺點也很明顯,就是資料的可讀性太差了,你無法直觀的看到具體時間。
時間戳的定義如下:
時間戳的定義是從一個基準時間開始算起,這個基準時間是「1970-1-1 00:00:00 +0:00」,從這個時間開始,用整數表示,以秒計時,隨著時間的流逝這個時間整數不斷增加。
這樣一來,我只需要一個數值,就可以完美地表示時間了,而且這個數值是一個絕對數值,即無論的身處地球的任何角落,這個表示時間的時間戳,都是一樣的,生成的數值都是一樣的,並且沒有時區的概念,所以在系統的中時間的傳輸中,都不需要進行額外的轉換了,只有在顯示給使用者的時候,才轉換為字串格式的本地時間。
資料庫中實際操作:
mysql> select UNIX_TIMESTAMP('2020-01-11 09:53:32'); +---------------------------------------+ | UNIX_TIMESTAMP('2020-01-11 09:53:32') | +---------------------------------------+ | 1578707612 | +---------------------------------------+ 1 row in set (0.00 sec) mysql> select FROM_UNIXTIME(1578707612); +---------------------------+ | FROM_UNIXTIME(1578707612) | +---------------------------+ | 2020-01-11 09:53:32 | +---------------------------+ 1 row in set (0.01 sec)
推薦 Timestamp,原因是數值表示時間不夠直觀
每種方式都有各自的優勢,根據實際場景才是王道。下面再對這三種方式做一個簡單的對比,以供大家實際開發中選擇正確的存放時間的資料型別:
[mysqld] sql-mode=STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45