其中一張表的建表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開始 ...