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探究之null與not nullMySqlNull
- not null與check is not nullNull
- 故障分析 | MySQL 遷移後 timestamp 列 cannot be nullMySqlNull
- MySQL中is not null和!=null和<>null的區別MySqlNull
- MySQL NULLMySqlNull
- MySQL中IS NULL、IS NOT NULL、!=不能用索引?胡扯!MySqlNull索引
- ((NULL) null).printNULL();((NULL) null).printnull();Null
- MySQL null值儲存,null效能影響MySqlNull
- MySQL null和''分析MySqlNull
- mysql分割槽nullMySqlNull
- mysql 查詢欄位為null或者非nullMySqlNull
- null與indexNullIndex
- NULL與索引Null索引
- null與substrNull
- NULL與排序Null排序
- mysql中null與“空值”的坑MySqlNull
- MySQL裡null與空值的辨析MySqlNull
- undefined與null與?. ??UndefinedNull
- IS NULL和IS NOT NULLNull
- 理解:MySQL的null與空字串的不同MySqlNull字串
- NULL 值與索引Null索引
- 了不起的 “filter(NULL IS NOT NULL)”FilterNull
- MySQL NOT NULL列用 WHERE IS NULL 也能查到資料的原因MySqlNull
- NULL 值與索引(二)Null索引
- Null 與 “” 的區別Null
- “NOT_IN”與“NULL”的邂逅Null
- 【NULL】Oracle null值介紹NullOracle
- Difference between 2>&-, 2>/dev/null, |&, &>/dev/null, >/dev/null, 2>&1devNull
- 快速理解MySQL null的10大坑MySqlNull
- JavaScript undefined與null區別JavaScriptUndefinedNull
- undefined與null的區別UndefinedNull
- count_sum_distinct與nullNull
- 使用mybatis報錯:Error setting non null for parameter #4 with JdbcType TIMESTAMPMyBatisErrorNullJDBC
- null == undefined ?NullUndefined
- hive nullHiveNull
- null ctasNull
- SQL NULLSQLNull