mysql : avoid automatic cast of string in integer in where clause

标签 mysql casting

在我的应用程序中,我使用通用 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/

相关文章:

mysql - R和RMySQL,如何获取连接的数据库名称?

mysql - mysql 中的存储过程替代方案可以更改

c# - 如何从作为对象获取的 IList<> 中获取项目计数?

java - 如何从 InputStream 转换为 AudioInputStream

php - 从两个 MySQL 表中提取

php - joomla 3x 将字符串插入sql数据库

mysql - 使用 union mysql 选择查询进行分组

c - 如何手动(按位)执行(float)x?

ios - '[双倍的? ]' is not convertible to ' [双]'