問題
在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官方文檔 對於默認值的處理
