概要
SequelProでクエリを書いてINSERTやUPDATEをする際、現在日時を登録したい場合に、NOW()
を使うことがよくあります。
DBのデフォルトのタイムゾーンの設定が日本時間になっていれば良いですが、そうでない場合は日本時間ではなく、9時間ずれた日時が入ってしまいます。
会社の環境であればデフォルトの設定を変更するのは諸事情で難しかったりします。
都度直接日時を記述しても良いですが、面倒です。
僕は今まで直接日時を記述したり、NOW()で入れた後に手動で日時を書き換えたりしていましたが、そんなことしなくてもクエリでNOW()を一時的に日本時間にする方法がありました。
やり方
SET SESSION time_zone = 'Asia/Tokyo';
SequelProでINSERTやUPDATEを実行する前にこれを実行する。それだけ。
デフォルトではtime_zone = 'UTC'
なのを、日本時間に変更しています。
これでこの後にINSERTやUPDATEでNOW()
を使うと、日本時間でDBへ保存されます。
あとがき
正直このやり方が普通なのか、もっと別のやり方があるのか、わかりません。
ただ私の周りの環境では、NOW()は日本時間にならないから使わない、日時を直接記述する、という場合が多かったです。
スプレッドシートなどで、貼り付けたデータを元に関数でINSERT文やUPDATE文を作成することがあり、その際に日時をいちいち書き換えたくないのでNOW()を日本時間にする方法を調べました。
参考
AWS RDS MySQL のタイムゾーンが UTC の状態で DATETIME フィールドに JST で入れてしまった場合の復旧