編碼的世界 / 優質文選 / 歷史

Mysql中datetime默認值問題


2022年7月11日
-   

在使用MySQL時當建表語句中有以下語句時:
create_time DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00'

則會出現以下的異常:
Invalid default value for 'create_time'

這是由於 SQL_MODE 的問題沒設置好,方案如下:
方案一:查詢當前數據庫的 SQL_MODE
輸入:
select @@sql_mode

得到以下結果:
ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

可以看到 NO_ZERO_IN_DATE,NO_ZERO_DATE 是 DATE 不能全部為0的原因,所以把模式中的NO_ZERO_IN_DATE,NO_ZERO_DATE去掉就可SET [SESSION|GLOBAL] sql_mode=’modes’下:
SET GLOBAL sql_mode='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'

其中:SESSION只在當前會話中生效,GLOBAL為全局生效。
方案二:
改mysql模式
修改my.cnf文件,在[mysqld]中添加
sql-mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

重啟mysql
方案三:把語句改為以下就可以執行創建表
create_time DATETIME NOT NULL DEFAULT '0000-01-01 00:00:00'

熱門文章