Maria DB/MySQL在比较时间戳方面的差异
我有两个不同的开发环境,MySQL 5.6和Maria DB 10.0 我使用WHERE查询,比如Maria DB/MySQL在比较时间戳方面的差异,mysql,date,Mysql,Date,我有两个不同的开发环境,MySQL 5.6和Maria DB 10.0 我使用WHERE查询,比如time>=“userInputBeginTime”来限制数据的最短日期 不幸的是,前端提供了错误的日期信息(在我的例子中,预期的输入是格式为“yyyy-MM-dd”的日期字符串,但真正的输入是“无效日期”,这是由于javascript错误造成的) 然后我发现MySQL和Maria DB之间存在差异 在MySQL中: SELECT NOW() > "Invalid Date" test; +-
time>=“userInputBeginTime”
来限制数据的最短日期
不幸的是,前端提供了错误的日期信息(在我的例子中,预期的输入是格式为“yyyy-MM-dd”的日期字符串,但真正的输入是“无效日期”,这是由于javascript错误造成的)
然后我发现MySQL和Maria DB之间存在差异
在MySQL中:
SELECT NOW() > "Invalid Date" test;
+-----------+
| test |
+-----------+
| 0 |
+-----------+
在Maria DB中:
SELECT NOW() > "Invalid Date" test;
+-----------+
| test |
+-----------+
| 1 |
+-----------+
这种差异直接导致MySQL不返回任何内容而Maria DB返回所有内容的不同结果
我想他们可能用不同的方法来比较
我的临时解决方案是像这样使用SQL
SELECT * FROM table_name
WHERE
NOT ISNULL(CONVERT("userInputBeginTime",datetime))
AND time >= "userInputBeginTime"
当检测到无效输入时,强制Maria DB不返回任何内容
我想知道是否有更好的解决方案
致以最诚挚的问候您可以尝试使用
STR\u TO\u DATE
将字符串解析为所需格式的日期。如果无法以指定的格式解析日期,此函数将返回NULL
。您的错误JavaScript输入将属于这一类,并应产生NULL
:
SELECT *
FROM table_name
WHERE STR_TO_DATE(userInput, '%Y-%m-%d') IS NOT NULL AND
<other conditions here>
选择*
从表\u名称
其中STR_TO_DATE(userInput,'%Y-%m-%d')不为NULL,并且
选择@@SQL\u模式代码>在两台服务器上。值匹配吗?嗨,谢谢@Michael sqlbot它们都返回+-----------+|@@sql|U模式|+----------------+| |+-------------+它们都是使用默认配置安装的