2012年4月5日木曜日

SQLiteでTIMESTAMP列のデフォルト値のタイムゾーンをJSTにする

SQLite3で次のようなテーブルを作った。
CREATE TABLE sample_table
(
    id          INTEGER   NOT NULL PRIMARY KEY
  , value       TEXT,
  , update_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
すると、update_dateにはタイムゾーンがUTCで日時がセットされてしまう。

調べてみると、DATETIME('now','localtime')とすると、タイムゾーンがJSTで日時が取れるということがわかった。
そこで、早速上記SQLを
CREATE TABLE sample_table
(
    id          INTEGER   NOT NULL PRIMARY KEY
  , value       TEXT,
  , update_date TIMESTAMP DEFAULT DATETIME('now','localtime')
);
としてみた。 しかし、
SQLite error
near "(": syntax error
というエラーが発生。

色々試してみて、DATETIME('now','localtime')を括弧で囲めばいいことがわかった。
最終的には、次のようなSQLとなった。
CREATE TABLE sample_table
(
    id          INTEGER   NOT NULL PRIMARY KEY
  , value       TEXT,
  , update_date TIMESTAMP DEFAULT (DATETIME('now','localtime'))
);

0 コメント :

コメントを投稿