對此,可能有一個簡單而直接的答案,但我對發生的事情略有困惑。Mysql - 將空值複製到非空表中
我有一列兩個基本表的每個具有該表中列的以下性質
CREATE TABLE test (correct_time timestamp NULL DEFAULT NULL)
CREATE TABLE test2 (correct_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP)
我然後插入一個NULL
值插入test
即
INSERT INTO test (correct_time) VALUES (NULL)
現在我嘗試和將test
中的所有條目複製到test2
。
INSERT INTO test2 SELECT * FROM test
這產生的結果爲test2
,其中現在的值是0000-00-00 00:00:00
。
我的第一個問題就是,test2
默認值是CURRENT_TIMESTAMP
,那麼爲什麼null
值給出的0000-00-00 00:00:00
一個值,而不是最近的時間?
此外,這產生了一個警告,column 'correct_time' cannot be null
。所以如果我們插入一個NULL
值,爲什麼它被設置爲0000-00-00 00:00:00
而不是拋出一個錯誤。
這可能取決於你在MySQL 設置'explicit_defaults_for_timestamp'系統變量https://dev.mysql.com/doc/refman/5.7/en /服務器系統變量。html#sysvar_explicit_defaults_for_timestamp –
此外,你需要驗證你的MySQL是否處於'strict'模式 - 這可能會影響它如何處理'null',因爲某些設置會將'null'轉換爲空字符串,因此' 000-00-00 00:00:00' https://dev.mysql.com/doc/refman/5.6/en/sql-mode.html#sql-mode-strict –
謝謝,這就是我曾經尋找。此變量已啓用,但是一旦我禁用它,數據類型時間戳的行爲就會發生變化。 –