MySQL多版本的時間型別問題

2021-09-28 11:44:52 字數 1451 閱讀 2775

其中一張表的建表sql類似於:

create table test(

***xx,

`create_time` datetime not null default current_timestamp comment '建立時間',

根據mysql 5.5的特性,datetime還支援不了動態預設值。

所以他們斟酌再三,決定改寫為timestamp型別。

我看到另外一張表的建表sql:

create table test2(

***xx,

`create_time` timestamp default null comment '建立時間',

***x

顯然在mysql 5.5裡面,timestamp型別是不支援default null的這種方式的。

在這一點上不存在額外的特性,就是timestamp的乙個限制,在5.5,5.7都不支援default null。

哪怕我們改下需求,支援基於timestamp型別的動態預設值,下面的sql也會丟擲問題。 

create table `qc_apeal` (

`id` int(11) not null auto_increment comment '自增id',

`create_time` timestamp not null default current_timestamp comment '建立時間',

`modify_time` timestamp default current_timestamp  comment '修改時間',

error 1293 (hy000): incorrect table definition; there can be only one timestamp column with current_timestamp in default or on update clause

可以很清晰的看到,timestamp可以支援動態預設值,但是不支援乙個表中存在兩個這樣的字段設定。

和開發同學聊了下,感覺需求和mysql支援的情況有些糾結。 

開發同學的需求是:

1)時間型別,統一成一種型別;

2)有些字段允許預設為當前時間;有些字段預設為空;

而按照目前能夠支援的情況,因為是基於版本5.5,所以簡單的總結如下:

1).datetime 在5.5版本不支援動態預設值,但是支援default null這種方式。

2).timestamp可以支援動態預設值,但是範圍要窄一些。

3).如果對timestamp設定動態預設值,表裡只能有乙個timestamp欄位

4).timestamp不支援default null的語法,5.5,5.7都不支援

所以在這種情況下,暫時沒有更好的解決方案了,如果在應用端能夠保證時間欄位的值,那麼這個問題就簡單多了。 

或者說,情況允許的話,可以把mysql 5.5公升級到mysql 5.7,那麼這個需求就是可以完美支援的。 

mysql 的時間型別

在mysql中表示時間的資料型別有date datetime year timestamp time五種型別,它們的作用如下 型別 顯示格式 取值 儲存空間 零值 datetime yyyy mm dd hh mm ss 1000 01 01 00 00 00 到 9999 12 31 23 59 ...

apache PHP多版本 切換的問題

在開發中切換php版本的時候出錯 經過2小時的日子排查終於找到是因為切換版本後載入的php7ts.dll模組還是原來版本的,因此保pid file 錯誤 解決方法 phpinidir h phpapache php 7.1.20 ts vc14 x64 loadfile h phpapache ph...

mySql 時間型別

datetime 時間日期 yyyy mm dd hh ii ss 表示範圍 1000到9999有0值 0000 00 00 00 00 00 date 日期 就是datetime中的date部分 time 時間 段 指定的摸個區間之間 時間到 時間 timerstarmap 時間戳 1970開始 ...