【发布时间】:2021-03-15 05:29:04
【问题描述】:
我有 3 台 MySQL/MariaDB 服务器正在运行,用于应用程序开发和测试:
MySQL Community Server 5.7.32MySQL Community Server 8.0.16MariaDB Community Server 10.4.12
服务器被配置为在同一台机器上的不同端口上运行。
SELECT @@sql_mode 适用于所有服务器:
-
MySQL Community Server 5.7.32:NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION -
MySQL Community Server 8.0.16:STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION -
MariaDB Community Server 10.4.12:NO_ZERO_IN_DATE,NO_ZERO_DATE,NO_ENGINE_SUBSTITUTION
我在我维护的旧代码中偶然发现了一些 SELECT 查询,这些查询无法运行,例如搜索具有给定模式的日期。查询如下所示:
SELECT * FROM `userTable` WHERE `birthDate` LIKE '2020-%-%';
SELECT * FROM `userTable` WHERE `birthDate` LIKE '%12%';
表格如下所示:
CREATE TABLE IF NOT EXISTS `userTable` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` TEXT COLLATE utf8_unicode_ci,
`birthDate` DATE,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
当我在 MySQL Community Server 8.0.16 上运行查询时,它们会因错误 Error Code: 1525. Incorrect DATE value: '2020-%-%'. 和 Error Code: 1525. Incorrect DATE value: '%12%'. 而失败。
MySQL Community Server 5.7.32 和MariaDB Community Server 10.4.12 成功执行查询。
为什么MySQL Community Server 8.0.16 无法执行这些 SELECT 查询?
PS:第一个SELECT查询可以写成
SELECT * FROM `userTable` WHERE YEAR(`birthDate`) = 2020;
在所有 3 台服务器上运行。
编辑:这是MySQL Community Server 8.0.16 中的一个错误,已在版本8.0.22 中修复。
【问题讨论】:
-
无法重现:dbfiddle.uk/… 添加您的源数据并重现问题。
-
为什么 MySQL Community Server 8.0.16 无法执行这些 SELECT 查询? 显示所有服务器的
SELECT @@sql_mode;输出。NO_ZERO_DATE和NO_ZERO_IN_DATE可能是一个原因。 -
Akina 我把它加到问题里了
-
添加了模式不是默认的,所以除此之外没有任何配置被改变。不正确。 PS。您是否找到了值导致问题的行?他们会在小提琴上产生同样的错误吗?
-
是查询错误,不是数据错误
标签: mysql sql date select mariadb