因為有新建資料表,前陣子寫了不同資料庫的更新語法,以方便讓客戶升級,結果意外踩到 SQLite 的一個坑。

原本自己都有測過新寫的語法能正常執行不出錯,以為這樣就算大功告成了, 結果同事在複測的時候,發現 SQLite 跑完升級語法後,系統新寫的時間相關功能會有點問題。

查看 log 後發現是新資料表的 DATETIME 欄位出了問題,但我想說不對呀,我明明有在升級語法裡附上這個欄位,系統怎麼會沒有正確接收到呢?

後來研究了一番才發現,因為我的 SQL 語法裡給的值是 1753-01-01。

這個寫法在 MSSQL, MySQL 是可以被接受的,資料庫在執行語法時,會自動幫我加上時、分、秒,變成 1753-01-01 00:00:00。

但 SQLite 不吃這一套,你寫 1753-01-01 就是 1753-01-01 進去,而且 SQLite 也不會說你的格式錯誤, 於是最後我調整了一下要填入的資料,把時間的值從 1753-01-01 改成 1753-01-01 00:00:00 就正常了。


文章作者: Michael

上次更新: 2023-12-11

授權條款: 保留所有權利