問題
在MySQL中創建表時一個列的數據類型是date,使用系統自帶的curdate()
想設置成當前日期
CREATE TABLE DATE_TEST(
id int,
create_date date default curdate()
)
執行后報錯,如下圖
將默認值改成CURRENT_DATE
還是報同樣的錯誤
解決方法
語句之所以會報錯,是因為在MySQL中default后只能是一個常量,而不能是一個表達式,如果必須要使用表達式則應該將該表達式整個用小括號包括起來
- 方法一 將數據類型換成
datetime
或timestamp
,然后使用now()
或CURRENT_TIMESTAMP
作為默認值
前面說default后只能接常量,但是有一個例外就是如果數據類型是datetime
或timestamp
,那么后面可以接一個對應的時間函數,也就是now()
或CURRENT_TIMESTAMP
(這兩個是等價的),如下面語句
CREATE TABLE DATE_TEST(
id int,
create_time datetime default now()
);
正常執行
CREATE TABLE DATE_TEST(
id int,
create_time timestamp default CURRENT_TIMESTAMP
);
- 方法二 將default后的函數用括號包起來
如果硬要使用date
類型,則需要將后面的表達式curdate()
或者CURRENT_DATE
用括號包起來
CREATE TABLE DATE_TEST(
id int,
create_date date default (curdate())
)
此時可以發現沒有問題了
使用CURRENT_DATE
也執行正常
插入一條語句試試,可以發現默認值設置成功
參考資料
stackOverFlow上相關問題的討論
MySQL官方文檔 對於默認值的處理