在我的应用程序中,我使用通用 where 子句在不同字段中进行搜索。
我的要求是这样的:
SELECT * FROM command WHERE id = :search OR name LIKE %:search%;
我正在搜索文本“2SAV”。
此请求返回一些名称包含“2SAV”(我想要的)的记录,但也返回 id=2 的记录。
如果我进行更多测试,我会注意到:
SELECT CAST("2SAV" AS SIGNED); //2
SELECT 2="2SAV"; //1
如果字符串以整数开头,则保留这部分字符串。
您有办法或解决方法来避免这种行为吗?
提前致谢,
最佳答案
MySQL 文档( https://dev.mysql.com/doc/refman/5.7/en/type-conversion.html ) 中指出:
- 在所有其他情况下,参数都作为浮点(实数)进行比较。
我认为你可以输入查询:
SELECT * FROM command WHERE id = cast(:search as char) OR name LIKE %:search%;
关于mysql : avoid automatic cast of string in integer in where clause,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46957001/