この記事は最終更新日から1年以上が経過しています。
はじめに
'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' とかでもできました。
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) |
まとめ
この仕様ありがたいのか迷惑なのか。。。
用法用量をお守りください。
この記事を書いた人
- 2017年入社の新卒です。
最近書いた記事
- 2019.10.11Pythonのアンパックとタプル
- 2019.01.22JavaScript側でsubmitができない
- 2018.12.13「AWS Toolkit for PyCharm について」~ RecoChoku Tech Night #09 4社合同 AWS re:Invent参加レポート で登壇しました ~
- 2018.12.02シリコンバレー1日ツアーに参加してきました(前半)