MariaDB:如果输入了一个不合法的日期,将返回所有的记录
也许你已经了解了,但我遇到了使用MariaDB时的一些困难。
我使用的MariaDB版本是10.3.27,因此可能根据版本不同,它的运行方式也可能有所不同。
在日期类型的项目中以不合法的日期进行更大的搜索。
当在日期字段进行搜索时,若使用无法识别为日期的字符进行大于搜索操作,结果将返回全部数据。
样本示例
MariaDB [test]> desc test_info;
+-------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------+-------------+------+-----+---------+-------+
| test_id | varchar(20) | NO | | NULL | |
| create_date | date | NO | | NULL | |
+-------------+-------------+------+-----+---------+-------+
2 rows in set (0.006 sec)
MariaDB [test]> select * from test_info;
+----------+-------------+
| test_id | create_date |
+----------+-------------+
| A0000001 | 2020-12-01 |
| A0000002 | 2021-01-01 |
| A0000003 | 2021-09-01 |
+----------+-------------+
3 rows in set (0.000 sec)
使用不包含日期的字符,例如AAAA,进行更大范围的搜索。
MariaDB [test]> select * from test_info where create_date > 'AAAA';
+----------+-------------+
| test_id | create_date |
+----------+-------------+
| A0000001 | 2020-12-01 |
| A0000002 | 2021-01-01 |
| A0000003 | 2021-09-01 |
+----------+-------------+
3 rows in set, 1 warning (0.000 sec)
我不认为会进行这样的搜索,但是由于在执行SQL之前没有对搜索字符串进行日期类型检查,导致出现了预料之外的结果(输出全部内容)。另外,由于出现了警告,如果确认内容,可以看到以下内容。
MariaDB [test]> SHOW WARNINGS ;
+---------+------+----------------------------------+
| Level | Code | Message |
+---------+------+----------------------------------+
| Warning | 1292 | Incorrect datetime value: 'AAAA' |
+---------+------+----------------------------------+
1 row in set (0.001 sec)
顺便提一下,即使日期不正确,也会返回0条结果。
MariaDB [test]> select * from test_info where create_date > '2022-02-31';
Empty set (0.000 sec)
如果要搜索日期类型的项目,我认为日期类型的检查是必需的。