主要會有下面兩個問題:
字串占用的空間更大
字串儲存的日期比較效率比較低(逐個字元進行比對),無法用日期相關的 api 進行計算和比較。
datetime 和 timestamp 是 mysql 提供的兩種比較相似的儲存時間的資料型別。
通常我們都會首選 timestamp。
原因如下:
2.1 datetime 型別沒有時區資訊的
datetime 型別是沒有時區資訊的(時區無關) ,datetime 型別儲存的時間都是當前會話所設定的時區對應的時間。這樣就會有什麼問題呢?當你的時區更換之後,比如你的伺服器更換位址或者更換客戶端連線時區設定的話,就會導致你從資料庫中讀出的時間錯誤。不要小看這個問題,很多系統就是因為這個問題鬧出了很多笑話。
timestamp 和時區有關。timestamp 型別欄位的值會隨著伺服器時區的變化而變化,自動換算成相應的時間,說簡單點就是在不同時區,查詢到同乙個條記錄此字段的值會不一樣。
建表 sql 語句:
create
table
`time_zone_test`
(`id`
bigint(20
)not
null
auto_increment
,`date_time`
datetime
default
null
,`time_stamp`
timestamp
notnull
default
current_timestamp
onupdate
current_timestamp
,primary
key(
`id`))
engine
=innodb
default
charset
=utf8;
插入資料:
insert
into time_zone_test(date_time,time_stamp)
values
(now()
,now()
);
檢視資料:
select date_time,time_stamp from time_zone_test;
結果:
+
---------------------+---------------------+
| date_time | time_stamp |
+---------------------+---------------------+
|2020-01
-1109:53:32
|2020-01
-1109:53:32|+
---------------------+---------------------+
修改當前會話的時區:
set time_zone=
'+8:00'
;
再次檢視資料:
+
---------------------+---------------------+
| date_time | time_stamp |
+---------------------+---------------------+
|2020-01
-1109:53:32
|2020-01
-1117:53:32|+
---------------------+---------------------+
一些關於 mysql 時區設定的乙個常用 sql 命令:
# 檢視當前會話時區
select @@session.time_zone
;# 設定當前會話時區
set time_zone =
'europe/helsinki'
;set time_zone =
"+00:00"
;# 資料庫全域性時區設定
select @@global.time_zone
;# 設定全域性時區
setglobal time_zone =
'+8:00'
;set
global time_zone =
'europe/helsinki'
;
2.2 datetime 型別耗費空間更大
timestamp 只需要使用 4 個位元組的儲存空間,但是 datetime 需要耗費 8 個位元組的儲存空間。但是,這樣同樣造成了乙個問題,timestamp 表示的時間範圍更小。
datetime :1000-01-01 00:00:00 ~ 9999-12-31 23:59:59
timestamp:1970-01-01 00:00:01 ~ 2037-12-31 23:59:59
注意:timestamp 在不同版本的 mysql 中有細微差別。
如何選擇資料庫儲存引擎
常見的資料庫儲存引擎有 isam myisam 和innodb 根據每個不同的儲存引擎提供的不同的核心功能 以及不同的應用場景等 一般把核心功能分為4類 支援的字段和資料型別 鎖定型別 索引 以及事務處理 1 支援的字段和資料型別 雖然所有的引擎都支援通用的資料型別 如 整型 字串等 但是 並不是所...
mysql資料庫 幾個時間儲存型別
一 timestamp 顯示格式 yyyy mm dd hh mm ss 時間範圍 1970 01 01 00 00 00 到 2037 12 31 23 59 59 timestamp default current timestamp on update current timestamp 在建...
資料庫儲存時間的時區問題
先說一下mysql中datetime和timestamp的區別 timestamp是標準的unix timestamp,它儲存的是1970 1 1到現在經過的秒數,4位元組儲存。mysql用這個型別還蠻方便的,乙個是有很多內建的函式和trigger來處理它,比如current timestamp巨集...