はじめに
'2018-05-31' でも '20180531' でも正しくINSERTできたので、どこまでできるのか調べてみました。
- MySQL Version 5.7.22
検証
とりあえずDATE型のカラムがあるテーブルを作成します。
mysql> CREATE TABLE date_table(id INT(11), date_column DATE);
まず普通に
- 区切り。'2018-05-31'
当然正しく入ります。
mysql> INSERT INTO date_table VALUES(1, '2018-05-31');
Query OK, 1 row affected (0.00 sec)
mysql> SELECT * FROM date_table WHERE id = 1;
+------+-------------+
| id | date_column |
+------+-------------+
| 1 | 2018-05-31 |
+------+-------------+
1 row in set (0.00 sec)
/ 区切りも正しく入ります。'2018/05/31'
mysql> INSERT INTO date_table VALUES(2, '2018/05/31');
Query OK, 1 row affected (0.00 sec)
mysql> SELECT * FROM date_table WHERE id = 2;
+------+-------------+
| id | date_column |
+------+-------------+
| 2 | 2018-05-31 |
+------+-------------+
1 row in set (0.00 sec)
区切り文字なしでもいけます。
'20180531'
mysql> INSERT INTO date_table VALUES(3, '20180531');
Query OK, 1 row affected (0.01 sec)
mysql> SELECT * FROM date_table WHERE id = 3;
+------+-------------+
| id | date_column |
+------+-------------+
| 3 | 2018-05-31 |
+------+-------------+
1 row in set (0.00 sec)
半角記号ならなんでもいけるようです。
'2018+05+31' や '2018{05>31' をINSERTしてみました。
mysql> INSERT INTO date_table VALUES(4, '2018+05+31');
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO date_table VALUES(5, '2018{05>31');
Query OK, 1 row affected (0.00 sec)
mysql> SELECT * FROM date_table WHERE id IN (4, 5);
+------+-------------+
| id | date_column |
+------+-------------+
| 4 | 2018-05-31 |
| 5 | 2018-05-31 |
+------+-------------+
2 rows in set (0.00 sec)
ただしバックスラッシュ
\ はエスケープ文字なので偶数個重ねる必要があります。
mysql> INSERT INTO date_table VALUES(6, '2018\05\31');
ERROR 1292 (22007): Incorrect date value: '2018' for column 'date_column' at row 1
mysql> INSERT INTO date_table VALUES(7, '2018\\05\\31');
Query OK, 1 row affected (0.01 sec)
mysql> SELECT * FROM date_table WHERE id IN (6, 7);
+------+-------------+
| id | date_column |
+------+-------------+
| 7 | 2018-05-31 |
+------+-------------+
1 row in set (0.00 sec)
半角文字
'2018a05z31' や全角文字 '2018年05月31日' はだめでした。
mysql> INSERT INTO date_table VALUES(8, '2018a05z31');
ERROR 1292 (22007): Incorrect date value: '2018a05z31' for column 'date_column' at row 1
mysql> INSERT INTO date_table VALUES(9, '2018年05月31日');
ERROR 1292 (22007): Incorrect date value: '2018年05月31日' for column 'date_column' at row 1
半角記号ならば何個重ねても良いようなので、 '2018~!@#$05^&*()31'code>’2018~!@#$05^&*()31′</code とかでもできました。
mysql> INSERT INTO date_table VALUES(10, '2018~!@#$05^&*()31');
Query OK, 1 row affected (0.00 sec)
mysql> SELECT * FROM date_table WHERE id = 10;
+------+-------------+
| id | date_column |
+------+-------------+
| 10 | 2018-05-31 |
+------+-------------+
1 row in set (0.00 sec)
正しい年月日の範囲ならば何桁でも良いようです。 頭に 0 をつけてINSERTしてみました。
mysql> INSERT INTO date_table VALUES(11, '002018-0005-0031');
Query OK, 1 row affected (0.01 sec)
mysql> SELECT * FROM date_table WHERE id = 11;
+------+-------------+
| id | date_column |
+------+-------------+
| 11 | 2018-05-31 |
+------+-------------+
1 row in set (0.00 sec)
まとめ
この仕様ありがたいのか迷惑なのか。。。 用法用量をお守りください。
海津 純平