我有两个不同的开发环境,即MySQL 5.6& Maria DB 10.0
我使用像time>="userInputBeginTime"
这样的WHERE查询来限制数据的最小日期。
不幸的是,前端提供了错误的日期信息(在我的情况下,预期的输入是日期字符串格式化为" yyyy-MM-dd",但真正的输入是"无效的日期& #34;由于javascript错误)
然后我发现了MySQL与...之间的区别Maria DB
在MySQL中:
SELECT NOW() > "Invalid Date" test;
+-----------+
| test |
+-----------+
| 0 |
+-----------+
在Maria DB:
SELECT NOW() > "Invalid Date" test;
+-----------+
| test |
+-----------+
| 1 |
+-----------+
这种差异直接导致了MySQL没有返回任何内容的不同结果,Maria DB返回了所有内容。
我认为他们可能会使用不同的方法进行比较
我的临时解决方案是使用像这样的
SELECT * FROM table_name
WHERE
NOT ISNULL(CONVERT("userInputBeginTime",datetime))
AND time >= "userInputBeginTime"
强制Maria DB在检测到无效输入时不返回任何内容。
我想知道是否有更好的解决方案?
最好的问候
答案 0 :(得分:0)
您可以尝试使用STR_TO_DATE
将字符串解析为您期望的格式的日期。如果它无法以指定的格式解析日期,则此函数将返回NULL
。您的错误JavaScript输入将属于此类别,应生成NULL
:
SELECT *
FROM table_name
WHERE STR_TO_DATE(userInput, '%Y-%m-%d') IS NOT NULL AND
<other conditions here>