mysql:避免在where子句中的整数中自动转换字符串

时间:2017-10-26 14:28:07

标签: mysql casting

在我的应用程序中,我使用泛型where子句在不同的字段中搜索。 我的要求是这样的:

SELECT * FROM command WHERE id = :search OR name LIKE %:search%;

我正在搜索文本“2SAV” 此请求返回一些记录,其中name包含“2SAV”(我想要的),但也包含id = 2的记录。

如果我做更多测试,我会注意到:

SELECT CAST("2SAV" AS SIGNED); //2
SELECT 2="2SAV"; //1

如果字符串以整数开头,则保留此部分字符串。

您是否有选择或解决方法以避免这种情况?

提前致谢,

1 个答案:

答案 0 :(得分: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%;