MySQLでISO8601の日付をDateTimeにインサート

MySQLでISO8601の日付をDateTimeにインサート

MySQLISO8601フォーマットの日付データをDateTimeにインサートする場合、そのままの日付文字列では「ERROR 1292 (22007): Incorrect datetime value」になります。

mysql> INSERT INTO テーブル名 VALUES('2020-12-24T19:01:00Z');
ERROR 1292 (22007): Incorrect datetime value: '2020-12-24T19:01:00Z' for column 'カラム名' at row 1

STR_TO_DATE()を使えばISO8601フォーマットの文字列をDateTime型のカラムに書き込むことができます。

insert into dttest VALUES(STR_TO_DATE('2020-12-24T01:01:00+0900','%Y-%m-%dT%T+0900'));

CONVERT_TZ()というのもあって下記のように書くこともできます。

select CONVERT_TZ("2020-12-26T01:01:02", "+9:00", @@session.time_zone);

@@session.time_zoneは、SHOW VARIABLES LIKE ‘%time_zone%’;でセットされているものらしい。