gpt4 book ai didi

MySQL 查询不应返回任何内容,返回一条记录

转载 作者:行者123 更新时间:2023-11-29 09:36:19 25 4
gpt4 key购买 nike

所以我正在编写一个查询来提取记录。它是这样的:

SELECT dossier.*
FROM dossier
WHERE dossier.id = '097a520ef2be66c53506cb0f3552557e'
LIMIT 1

我的id字段是INT。有一条 id 为 97 的记录,但不是097a520ef2be66c53506cb0f3552557e,所以我应该拿不到任何记录。

但我刚刚取回记录:https://prnt.sc/otn1uz

关于如何正确查询该字段的任何想法,以及什么会导致 MySQL 错误地思考
97 = 097a520ef2be66c53506cb0f3552557e?

最佳答案

正如评论中提到的,当你将字符串与整数进行比较时,MySQL会首先自动将字符串转换为整数。如果字符串包含数字前缀,则将其转换为该数字,否则将变为 0

避免这种情况的一种方法是在比较之前将整数转换为字符串:

WHERE CAST(dossier.id AS CHAR) = '097a520ef2be66c53506cb0f3552557e'

另一个解决方案是使用LIKE而不是=。由于这是字符串操作,所以会先自动将数字转换为字符串。

WHERE dossier.id LIKE '097a520ef2be66c53506cb0f3552557e'

LIKE 通常比 = 效率低,因为它执行模式匹配,但我假设当 中没有通配符时 MySQL 会将其优化为质量测试模式。

但是,这些都无法利用 ID 字段上的索引。最好的解决方案是首先避免将 INT 列与任意字符串进行比较。

关于MySQL 查询不应返回任何内容,返回一条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57530069/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com