[英]Unable to insert NULL values to a NOT NULL date field after upgrading from MySQL 5.7 to MySQL 8
我從 MySQL 5.7.26 升級到 8.0.20。
其中一個表沒有 TIMESTAMP 數據類型的空列,默認值為 CURRENT_TIMESTAMP。
在 5.7.26 上,如果像下面這樣的插入語句被運行,它曾經成功執行並且非空列曾經被填充為默認值,即 CURRENT_TIMESTAMP。
mysql>insert into test_field ( object_type, dataType, fieldSize, hiddenFlag , fieldLabel, fieldName, modified_date) values ('LEAD', 13, 44, 1, 'Date Last Updated_testing1', 'test_Insert_test1', NULL);
查詢正常,1 行受影響,1 條警告(0.00 秒)
升級到 8.0.20 后,出現錯誤:
mysql>insert into test_field ( object_type, dataType, fieldSize, hiddenFlag , fieldLabel, fieldName, modified_date) values ('LEAD', 13, 44, 1, 'Date Last Updated_testing1', 'test_Insert_test1', NULL);
ERROR 1048 (23000): 列 'modified_date' 不能為空
我不認為 MySQL 在將null
插入到設置了default
值的不可為nullable
列方面的行為在 5.7 和 8.0 版本之間發生了變化。 但是,據記載,在這種情況下會發生什么取決於是否啟用了嚴格模式:
如果啟用了嚴格的 SQL 模式,事務表會發生錯誤並回滾語句。 對於非事務性表,會發生錯誤,但如果多行語句的第二行或后續行發生這種情況,則會插入前面的行。
如果未啟用嚴格模式,MySQL 會將列設置為列數據類型的隱式默認值。
可能你的新 8.0 安裝啟用了嚴格模式,而你的 5.7 數據庫中禁用了它。
一種可能的解決方法是使用DEFAUT
而不是NULL
:
insert into test_field (object_type, dataType, fieldSize, hiddenFlag , fieldLabel, fieldName, modified_date)
values ('LEAD', 13, 44, 1, 'Date Last Updated_testing1', 'test_Insert_test1', DEFAULT);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.