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%’;でセットされているものらしい。

MariaDB uuid()カラム作成

MariaDB default uuid()

MariaDBにはUUIDを生成するためのUUID関数が利用できます。UUID関数を使うことでユニークなIDを取得できPRIMARY KEY(主キー)として利用することも可能です。下のSQLはSELECTを用いたUUID生成例です。(MySQLでもUUIDは使えます)

SELECT UUID();
select uuid() 例
select uuid() 例

テーブル作成時にカラムのdefaultにuuid()を入れることもできます。下記はt1という名称のテーブル作成時s1カラムのデフォルトとしてuuid()を設定しています。

create table t1 ( s1 varchar(40) not null default uuid(), primary key(s1) );

テーブルt1にレコード追加を試してみます。

insert into t1 values();
レコード挿入
レコード挿入

テーブルt1をSELECT文で確認すると、上のようにカラムs1にUUIDがセットされていることが確認できます。。つづいて、このテーブルt1にもう1つs2というカラムを追加し、そのカラムにUUIDがデフォルトで入るようにします。

alter table t1
add column s2 varchar(40) not null default uuid() after s1,
add unique index i2 (s2);
default uuid()カラム追加
default uuid()カラム追加

uuid()がデフォルトに入っているので カラムs2を追加するとレコード内s2にuuidが入ります。

2022 MJELD TECHNOLOGIES. ALL RIGHTS RESERVED