mysql - SQL语法语句有什么问题
问题描述
我有一个表名工作区,其 id 具有数据类型 = bigint(20) unsigned 我正在尝试查询我的数据库,如下所示:
SELECT * FROM 工作区,其中 id = 1;
SELECT * FROM 工作区,其中 id = '1.a';
它们都返回正确的结果。但是我认为(2)语句是错误的,为什么sql仍然返回正确的值对吗?是什么原因?你能帮我理解为什么吗?太感谢了。
解决方案
当您尝试将字符串文字(例如1.a
)与整数列(id
)进行比较时,MySQL 有复杂的转换规则。这里发生的是 MySQL 从字符串中获取前导数字,然后基于该数字形成一个数字。结果,检查变为1 = 1
,这对于正在返回的特定记录是正确的。
在大多数其他数据库上,您的第二个查询甚至不会执行,这通常对您来说更好。您不应在同一比较中混合使用数字和非数字类型。
推荐阅读
- wordpress - 读取 Elementor 表单字段的值,并将其用于下一个字段
- python - 当pandas中有很多条件时如何过滤数据?
- dagger-2 - 匕首中的配置文件
- node.js - 日期未在 MongoDB 中更新
- identityserver4 - 您将收到的令牌存储在 OpenID-connect 客户端的什么位置?
- javascript - 为什么在 Material-UI 文档中使用 useMemo 来进行自动完成?
- asynchronous - 在需要特征对象的上下文中使用借用参数的异步函数
- git - 在不执行 git rebase 的情况下更改提交的父级
- c - C 检查器中的密码似乎不起作用
- python - 使用 hdfql 将多个 CSV 文件导入 hdf5?