MySQL中時間日期型別的使用

2021-09-09 05:57:46 字數 3721 閱讀 9052

參考mysql 資料型別(還有其他知識)

參考 sql 資料型別

表示時間值的日期和時間型別為 datetime、date、timestamp、time和year。

每個時間型別有乙個有效值範圍和乙個"零"值,當指定不合法的mysql不能表示的值時使用"零"值。

timestamp型別有專有的自動更新特性。

mysql中 日期和時間型別 型別

大小(位元組)

範圍格式

用途date

31000-01-01/9999-12-31

yyyy-mm-dd

日期值time

3'-838:59:59'/'838:59:59'

hh:mm:ss

時間值或持續時間

year

11901/2155

yyyy

年份值datetime

81000-01-01 00:00:00/9999-12-31 23:59:59

yyyy-mm-dd hh:mm:ss

混合日期和時間值

timestamp

41970-01-01 00:00:00/2038

結束時間是第2147483647秒,北京時間2038-1-19 11:14:07,格林尼治時間 2023年1月19日 凌晨 03:14:07

yyyymmdd hhmmss

混合日期和時間值,時間戳

開始使用的是 mysql 5.5.47

建立表時出錯了,遇到兩個問題。。

問題一:

查閱資料,原來是版本問題

在5.5到5.6.4版本裡,對於default current_timestamp 子句,只能timestamp型別列上指定。

而從5.6.5開始以後的版本,對於default current_timestamp子句可以指定到timestamp或者datetime型別列上。

問題二:

想給乙個型別為date欄位設定乙個default value(current_date,current_date(),now())但試了很久都不行。最後試了下 default null 成功了,再試下 default 1也成功了。最後網上查了一下資料,原因是date型別的default value 一定要是乙個常量,不能是乙個函式或者是表示式。所以不能給mysql的date型別的列設定預設值。

相同點:

兩者都可用來表示yyyy-mm-dd hh:mm:ss 型別的日期。

不同點:

他們的的儲存方式,大小(位元組),表示的範圍不同。

timestamp,它把客戶端插入的時間從當前時區轉化為utc(世界標準時間)進行儲存。查詢時,將其又轉化為客戶端當前時區進行返回。

datetime,不做任何改變,基本上是原樣輸入和輸出。

總結:timestamp和datetime 都可用來表示yyyy-mm-dd hh:mm:ss 型別的日期, 除了儲存方式和儲存範圍以及大小不一樣,沒有太大區別。但對於跨時區的業務,timestamp更為合適。

有些應用生成的時間戳是比這個多出三位,是毫秒表示,如果要轉換,需要先將最後三位去掉(標準的10位數字,如果是13位的話可以以除以1000的方式),否則返回null

#將時間轉換為時間戳unix_timestamp

select unix_timestamp('2019-02-22 13:25:07'); #1550813107

#將時間戳轉換為時間from_unixtime

select from_unixtime(1550813107); #2019-02-22 13:25:07

#now

select unix_timestamp(now()); #1550813420

select from_unixtime(1550813420); #2019-02-22 13:30:20

參考 mysql的10位或13位時間戳獲取,表示及13位時間戳的儲存

然後我將 mysql 改為 mysql 5.7.17,公升一下版本

參考 mysql date_format() 函式

#mysql 按時間日期查詢

drop table if exists tb_test;

create table if not exists tb_test(

id int not null auto_increment comment 'id',

name varchar(100) default null comment '名稱',

create_time timestamp default current_timestamp comment '建立時間',

update_time timestamp default current_timestamp on update current_timestamp comment '更新時間',

primary key (id)

) engine=innodb auto_increment=100 default charset=utf8 comment '時間測試表';

#插入資料

insert into tb_test (name) values

('luo'),

('lei'),

('luolei'),

('xing'),

('dxx');

#修改資料

update tb_test set name='luo1', update_time='2021-01-23' where id=100;

update tb_test set name='luo2', update_time='2022-02-23' where id=101;

update tb_test set name='luo3', update_time='2023-03-23' where id=102;

#根據年月日查資料

select *from tb_test where date_format(update_time, '%y-%m-%d')='2019-02-22';

#根據年月查資料

select *from tb_test where date_format(update_time, '%y-%m')='2021-01';

#根據年查資料

select *from tb_test where date_format(update_time, '%y')='2022';

#根據日期區間查詢資料,並排序

個人**歡迎來訪

MySQL中的時間日期型別

mysql中共有5種時間日期型別 型別名稱 時間格式 取值範圍 mysql5.6.4之前儲存需求 位元組 mysql5.6.4開始儲存需求 位元組 year yyyy 1901 2155 11 date yyyy mm dd 1000 01 01 9999 12 333 time hh mm ss ...

MySQL 時間日期型別

表示時間值的日期和時間型別為datetime date timestamp time和year。每個時間型別有乙個有效值範圍和乙個 零 值,當指定不合法的mysql不能表示的值時使用 零 值。timestamp型別有專有的自動更新特性。型別大小 位元組 範圍格式 用途date 31000 01 01...

MySQL時間日期型別

mysql中的 時間型別 日期和時間型別 位元組 最小值 最大值date 4 1000 01 01 9999 12 31 datetime 8 1000 01 01 00 00 00 9999 12 31 23 59 59 timestamp 4 19700101080001 2038 年的某個時刻...