簡體   English   中英

從 MySQL 5.7 升級到 MySQL 8 后,無法將 NULL 值插入 NOT NULL 日期字段

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM