資料庫如何儲存時間

2021-10-02 11:23:25 字數 2601 閱讀 6486

主要會有下面兩個問題

字串占用的空間更大

字串儲存的日期比較效率比較低(逐個字元進行比對),無法用日期相關的 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巨集...