MySQL無法給date類型的列設置默認值的解決方法


問題

在MySQL中創建表時一個列的數據類型是date,使用系統自帶的curdate()想設置成當前日期

CREATE TABLE DATE_TEST(
  id int,
  create_date date default curdate()
)

執行后報錯,如下圖
錯誤1
將默認值改成CURRENT_DATE還是報同樣的錯誤

解決方法

語句之所以會報錯,是因為在MySQL中default后只能是一個常量,而不能是一個表達式,如果必須要使用表達式則應該將該表達式整個用小括號包括起來

  • 方法一 將數據類型換成datetimetimestamp,然后使用now()CURRENT_TIMESTAMP作為默認值

前面說default后只能接常量,但是有一個例外就是如果數據類型是datetimetimestamp,那么后面可以接一個對應的時間函數,也就是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())
)

此時可以發現沒有問題了
使用curdate()函數

使用CURRENT_DATE也執行正常
使用CURRENT_DATE

插入一條語句試試,可以發現默認值設置成功
驗證

參考資料

stackOverFlow上相關問題的討論
MySQL官方文檔 對於默認值的處理

與此問題相關的延伸閱讀

MySQL官方文檔 時間數據類型
MySQL官方文檔 時間類型相關函數


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM