我有一个没有签名的表名工作区,id具有数据类型= bigint(20),我试图按如下方式查询我的数据库:
它们都是返回正确的结果。但是我认为(2)语句是错误的,为什么sql仍然返回正确的值正确?原因何在?你能帮我理解一下原因吗?非常感谢。
发布于 2020-03-16 07:35:32
MySQL具有复杂的转换规则,用于将字符串文本(例如1.a)与整数列(id)进行比较时会发生什么。这里发生的事情是,MySQL从字符串中提取前导数字,然后根据它形成一个数字。结果,检查变成了1 = 1,对于正在返回的特定记录来说,这是正确的。
在大多数其他数据库上,您的第二个查询甚至不会执行,这通常对您更好。不应将数字类型和非数字类型混合在相同的比较中。
发布于 2020-03-16 07:35:04
它从字符串中提取数字。
例如"1.a"=1
希望能帮上忙。
发布于 2020-03-16 07:35:38
在比较运算符(在本例中为=)的两边不匹配的情况下,数据库将尽力转换另一方的类型。如果根本没有办法这样做,它将抛出一个错误,但它仍然不会是语法错误(因为查询本身有一个有效的表单),但是在类型转换方面有一些错误。
具体来说,MySQL以快速和松散地使用类型转换而闻名。在将字符文字转换为数字类型的情况下,如果字符串以数字开头,它将将开始的数字序列转换为数字,并忽略后面的任何内容。
https://stackoverflow.com/questions/60701886
复制相似问题