首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL语法语句有什么问题?

SQL语法语句有什么问题?
EN

Stack Overflow用户
提问于 2020-03-16 07:30:44
回答 3查看 38关注 0票数 1

我有一个没有签名的表名工作区,id具有数据类型= bigint(20),我试图按如下方式查询我的数据库:

  1. 从id =1的工作区中选择*;
  2. 从id =‘1.A’的工作区中选择*;

它们都是返回正确的结果。但是我认为(2)语句是错误的,为什么sql仍然返回正确的值正确?原因何在?你能帮我理解一下原因吗?非常感谢。

这是test case on db<>fiddle

EN

回答 3

Stack Overflow用户

发布于 2020-03-16 07:35:32

MySQL具有复杂的转换规则,用于将字符串文本(例如1.a)与整数列(id)进行比较时会发生什么。这里发生的事情是,MySQL从字符串中提取前导数字,然后根据它形成一个数字。结果,检查变成了1 = 1,对于正在返回的特定记录来说,这是正确的。

在大多数其他数据库上,您的第二个查询甚至不会执行,这通常对您更好。不应将数字类型和非数字类型混合在相同的比较中。

票数 1
EN

Stack Overflow用户

发布于 2020-03-16 07:35:04

它从字符串中提取数字。

例如"1.a"=1

希望能帮上忙。

票数 0
EN

Stack Overflow用户

发布于 2020-03-16 07:35:38

在比较运算符(在本例中为=)的两边不匹配的情况下,数据库将尽力转换另一方的类型。如果根本没有办法这样做,它将抛出一个错误,但它仍然不会是语法错误(因为查询本身有一个有效的表单),但是在类型转换方面有一些错误。

具体来说,MySQL以快速和松散地使用类型转换而闻名。在将字符文字转换为数字类型的情况下,如果字符串以数字开头,它将将开始的数字序列转换为数字,并忽略后面的任何内容。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60701886

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档