mysql将字符串“now()”视为datetime?

mysql将字符串“now()”视为datetime?,mysql,mariadb,Mysql,Mariadb,我有一个错误构造的查询,将函数“now”作为字符串包含: select Listing.id,Listing.reactivated FROM `listings` AS Listing WHERE Listing.reactivated < 'now()'; 实际上,几个日期函数,即使没有括号也可以工作;像“now”或“curdate”,但简单地选择“now”;,将返回一个字符串 实际上,当我们将Mysql升级到MariaDB 10.1时,我注意到了这一点,在那里它停止了工作,上面

我有一个错误构造的查询,将函数“now”作为字符串包含:

 select Listing.id,Listing.reactivated FROM `listings` AS Listing  WHERE Listing.reactivated < 'now()';
实际上,几个日期函数,即使没有括号也可以工作;像“now”或“curdate”,但简单地选择“now”;,将返回一个字符串

实际上,当我们将Mysql升级到MariaDB 10.1时,我注意到了这一点,在那里它停止了工作,上面查询的结果是一个空集,并且有一个警告:

| Warning | 1292 | Incorrect datetime value: 'NOW()' |
我知道我们应该解决这些问题:,但我想问一下,是否有人知道这背后的原因,这是什么时候改变的,以及这种行为是否可以配置?

索赔文件:

如果其中一个参数是TIMESTAMP或DATETIME列,而另一个参数是常量,则在执行比较之前,该常量将转换为时间戳

但在本例中,情况似乎并非如此,因此它可能是一个bug。它似乎正在将DATETIME转换为字符串,并将其与常量进行比较。因此,如果当前日期时间为2016-07-19 15:13:06,则得到以下结果:

SELECT '2016-07-19 15:13:06' < 'now()';
这也返回1。但如果我将其更改为:

SELECT NOW() < '100', NOW() < '!';
结果为0。

不要使用引号:“现在”;现在就说


前者是字符串,不是有效的日期时间。“NOW”和“XYZ”也一样。

它看起来不像我观察到的行为;看起来任何日期时间都比“现在”短。选择now+INTERVAL 10 SECOND<'now',now+INTERVAL 10 SECOND>'now'产生1,0。我发现任何字符串文字都可以与日期字段进行有效比较。从过期的mypasswords中选择*不返回任何记录。从过期的mypasswords中选择*>“ndseow”返回全部。如果您看到的行为是正确的,那可能是巧合。@uuerdo我这样做了,得到了您的结果,并且它还提供了错误的datetime值:“now”。它似乎正在将datetime转换为字符串,导致类似2016-07-19 01:23:45的结果,然后将该字符串与现在进行比较。但是这个函数说它应该将常量字符串转换成日期时间,然后比较它们。谢谢,这些都非常有用。我没有注意到差异,因为“现在”和“现在”的结果是一样的。
SELECT NOW() < '300';
SELECT NOW() < '100', NOW() < '!';