sqlite3で日付にdefault値が適用されない時の対処法

プログラミング関連

こんにちは、今回は、sqlite3でdefault値が適用されない時の対処法を書いていきます。

sqliteは、結構個性的で、phpMyAdminのようなGUIを使用せず、CUIのみで簡潔させるとかなり引っかかります。
今回引っかかったのは、default値が適用されないところです。

not nullにすると、そもそもINSERTができず、
not nullを外して、初期値nullにすると、default値が適用されず、nullが挿入。
暗黙的にnull値にするため空にするとカラム数が一致しないと怒られました。

mysql、oracleと少し異なり下記の書き方をすることで期待通りの結果が得られます。

//
CREATED_AT DATE NOT NULL ON CONFLICT REPLACE DEFAULT (DATETIME('now', 'localtime'))

「NOT NULL ON CONFLICT REPLACE DEFALT XXXX」と入力することで
明示的にNULLを代入してもDEFAULT値で記述した内容が適用されます。

上の場合は、INSERT値の時間が反映されます。

以上です。

コメント

タイトルとURLをコピーしました