【问题标题】:MySQL integer comparison ignores trailing alpha charactersMySQL整数比较忽略尾随字母字符
【发布时间】:2011-04-07 01:14:56
【问题描述】:

所以假设我有一个只有一个 ID 的表是一个 int。我发现正在运行:

SELECT *
FROM table 
WHERE ID = '32anystring';

返回 id = 32 的行。显然是 32 != '32anystring'。

这看起来很奇怪。为什么这样做?可以关闭吗?最好的解决方法是什么?

【问题讨论】:

    标签: mysql


    【解决方案1】:

    在将字符串转换为数字时,将前导数字解释为数字是大多数编程语言的常见行为。

    有几种方法可以解决这个问题:

    使用准备好的语句,并定义要放置数值类型的占位符。这将完全防止将字符串放入其中。

    在应用程序的更高层检查以验证输入并确保它是数字的。

    在 mysql 中使用 BINARY 关键字(我只是猜测这会起作用,从未实际尝试过,因为我总是在运行查询之前实现了一个适当的验证系统) -

    SELECT *
    FROM table 
    WHERE BINARY ID = '32anystring';
    

    【讨论】:

      【解决方案2】:

      你需要阅读这篇文章

      http://dev.mysql.com/doc/refman/5.1/en/type-conversion.html

      1. 当您处理或比较两种不同的类型时,其中一种将转换为另一种。
      2. 字符串->数字的MySQL转换(你可以做'1.23def' * 2 => 2.46)尽可能多地解析字符串,只要它仍然是一个有效的数字。如果第一个字母不能是数字的一部分,则结果为 0

      【讨论】:

      • 这有点不正确(至少对于我的版本)。 SELECT 'abc123def' * 2 => 0,如果您删除前导字母,它确实有效。
      • @therealsix / 谢谢。我认为它适用于第一个区块。
      猜你喜欢
      • 2010-09-26
      • 1970-01-01
      • 2014-08-28
      • 2017-02-21
      • 1970-01-01
      • 1970-01-01
      • 2016-09-02
      • 2019-08-03
      相关资源
      最近更新 更多