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)

如果要搜索日期类型的项目,我认为日期类型的检查是必需的。

广告
将在 10 秒后关闭
bannerAds