【发布时间】:2021-06-25 16:07:15
【问题描述】:
我的 SQL 查询有点卡住了。
我有一个表,其中的行可以通过 id 或哈希字符串来识别...
| id | short | title |
|---|---|---|
| 1 | asdadasdsd | foo |
| 2 | 1qweqweqwe | bar |
| 3 | yxcyxcyxcy | baz |
所以 SQL 很简单...
SELECT * FROM table WHERE id=<identifier> OR hash=<identifier>
我发现当我的标识符是散列并且以可以在 id 列中找到的数字开头时,MYSQL 会返回“错误”行。 例如,当我的标识符是“1qweqweqwe”时,结果是第 1 行。 我认为原因是它可能将我的哈希字符串转换为整数?有没有办法禁用这种行为? 或者唯一的方法是将所有哈希重新生成为没有数字的新格式?
感谢您的澄清:)
彼得
【问题讨论】:
-
这是一个关于 MySql 如何违反 ansi 标准的 ooooold 问题。任何其他数据库,由于字符串和 varchar 之间的转换问题,此查询甚至无法运行。并不是
1qweqweqwe不再匹配 id 1。要完全符合 ansi 标准,您也不会看到 id 2,因为查询只会失败。您需要类似 Sql Server 的Try_Convert()来获得更正确的处理。这也是对标准的扩展,但它更符合几乎所有其他数据库的做法。 -
谢谢乔尔 :)