MySQL案例-TIMESTAMP NOT NULL與NULL
-------------------------------------------------------------------------------------------------短文---------------------------------------------------------------------------------------------------------------
場景:
MySQL >= 5.7.17, 業務反饋資料庫版本升級到5.7以後, 以前的一些sql在新版本無法執行了;
結論:
版本變遷導致一些不規範的寫法被MySQL阻止了;
分析:
在測試環境重現一下;
新版本報錯的語句:
相關表的表結構:
報錯資訊如下:
當然, 從表面上看, 這種做法肯定不行, 都已經宣告瞭time是not null的, 但是程式說老版本沒問題, 而這種做法又是必需的, so......_(:з」∠)_......let' go!
既然是timestamp的問題, 那就找找有關timestamp的data type相關的資訊吧;
翻一翻文件, 發現有這麼一章: Automatic Initialization and Updating for TIMESTAMP and DATETIME
仔細找了找, 發現有提到這個問題:
大致意思:
如果explicit_defaults_for_timestamp這個選項處於關閉狀態, 那麼當timestamp(注意, 不是datetime)的列在更新時, 可以用null來作為SQL中的value,
MySQL會自動使用當前時間來進行替換;
貌似改個引數就能解決了? (⊙_⊙)
試試先.....
額.....這應該是最近最好解決的問題了.....至於sql_mode, strict_mode什麼的對種行為毫無影響;
PS: 這個引數是和DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP一起使用的, 單獨使用應該是沒什麼效果;
PPPPPPS: 其實這個小問題沒必要寫個blog, 扔在"千奇百怪的MySQL"下的 "MySQL之奇奇怪怪的小問題"就好了, 不過嘛...居然還有這種操作....這是我看到這種做法的第一反應....(╯>д<)╯ 那就記下來吧.....
場景:
MySQL >= 5.7.17, 業務反饋資料庫版本升級到5.7以後, 以前的一些sql在新版本無法執行了;
結論:
版本變遷導致一些不規範的寫法被MySQL阻止了;
分析:
在測試環境重現一下;
新版本報錯的語句:
點選(此處)摺疊或開啟
- insert into timestamp_test values(0,null);
相關表的表結構:
點選(此處)摺疊或開啟
-
CREATE TABLE `timestamp_test` (
-
`id` int(11) NOT NULL,
-
`time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
-
PRIMARY KEY (`id`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
報錯資訊如下:
當然, 從表面上看, 這種做法肯定不行, 都已經宣告瞭time是not null的, 但是程式說老版本沒問題, 而這種做法又是必需的, so......_(:з」∠)_......let' go!
既然是timestamp的問題, 那就找找有關timestamp的data type相關的資訊吧;
翻一翻文件, 發現有這麼一章: Automatic Initialization and Updating for TIMESTAMP and DATETIME
仔細找了找, 發現有提到這個問題:
大致意思:
如果explicit_defaults_for_timestamp這個選項處於關閉狀態, 那麼當timestamp(注意, 不是datetime)的列在更新時, 可以用null來作為SQL中的value,
MySQL會自動使用當前時間來進行替換;
貌似改個引數就能解決了? (⊙_⊙)
試試先.....
額.....這應該是最近最好解決的問題了.....至於sql_mode, strict_mode什麼的對種行為毫無影響;
PS: 這個引數是和DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP一起使用的, 單獨使用應該是沒什麼效果;
PPPPPPS: 其實這個小問題沒必要寫個blog, 扔在"千奇百怪的MySQL"下的 "MySQL之奇奇怪怪的小問題"就好了, 不過嘛...居然還有這種操作....這是我看到這種做法的第一反應....(╯>д<)╯ 那就記下來吧.....
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29510932/viewspace-2144361/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MYSQL timestamp NOT NULL插入NULL的報錯問題MySqlNull
- 故障分析 | MySQL 遷移後 timestamp 列 cannot be nullMySqlNull
- MySQL NULLMySqlNull
- MySQL中IS NULL、IS NOT NULL、!=不能用索引?胡扯!MySqlNull索引
- MySQL null值儲存,null效能影響MySqlNull
- MySQL null和''分析MySqlNull
- mysql中null與“空值”的坑MySqlNull
- null與indexNullIndex
- undefined與null與?. ??UndefinedNull
- 使用mybatis報錯:Error setting non null for parameter #4 with JdbcType TIMESTAMPMyBatisErrorNullJDBC
- MySQL NOT NULL列用 WHERE IS NULL 也能查到資料的原因MySqlNull
- 【NULL】Oracle null值介紹NullOracle
- JavaScript undefined與null區別JavaScriptUndefinedNull
- PropertyChanged == nullNull
- mysql遇到Variable can’t be set to the value of ‘NULL’MySqlNull
- MySQL為何不建議使用null列MySqlNull
- 2>/dev/null和>/dev/null 2>&1和2>&1>/dev/null的區別devNull
- [20200317]NULL與排序輸出.txtNull排序
- 索引與null(二):組合索引索引Null
- 索引與null(一):單列索引索引Null
- NULL列時,如何使得IS NULL或者IS NOT NULL可以使用索引來提高查詢效率Null索引
- 為什麼索引無法使用is null和is not null索引Null
- MySQL-去掉不為null的欄位MySqlNull
- 快速理解MySQL null的10大坑MySqlNull
- null 和 undefinedNullUndefined
- Mysql:Variable 'XXXt' can't be set to the value of 'NULL'解決MySqlNull
- mysql 空值(null)和空字元('')的區別MySqlNull字元
- NULL在oracle和mysql索引上的區別NullOracleMySql索引
- MySQL 的 NULL 值是怎麼儲存的?MySqlNull
- 面試題((A)null).fun()——java中null值的強轉面試題NullJava
- PHP7 ?? 與 ?: 的作用和區別(null合併運算子, null條件運算子)PHPNull
- SCSS Null 型別CSSNull型別
- null in ABAP and nullpointer in JavaNullJava
- in、exists操作與null的一點總結Null
- dart系列之:和null說再見,null使用最佳實踐DartNull
- MySQL null值欄位是否使用索引的總結MySqlNull索引
- 今天測試了一下mysql的Null值MySqlNull
- MySQL(四)日期函式 NULL函式 字串函式MySql函式Null字串
- null調整為not null default xxx,不得不注意的坑Null