首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么比较MYSQL中的类型不会引起错误?

问为什么比较MYSQL中的类型不会引起错误?
EN

Stack Overflow用户
提问于 2016-07-05 11:40:12
回答 2查看 105关注 0票数 2

这是:

代码语言:javascript
复制
SELECT * FROM table WHERE comlumn1 = column2;

返回结果。

这是:

代码语言:javascript
复制
SELECT * FROM table WHERE column1 != column2;

没有返回任何内容,即使列中有满足这两个请求的单元格。

原来column1是varchar,column2是int。

我的问题是,为什么它没有出错?为什么其中一个会返回结果而不是另一个呢?如果类型不同,难道它们总是不平等吗?

更新

column1中的值为varchars,1234-34,column2有ints,1234。这意味着它总是匹配的,因为它会将varchar 1234-34转换为1234。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-07-05 11:44:45

当将字符串与数字进行比较时,MySQL尝试将字符串转换为数字以进行比较。

如果不可能,则字符串的数字结果是0。

示例:

代码语言:javascript
复制
string value  |   int value  |   comparison result
'abc'         |   1          |   0 = 1 -> false
'1'           |   1          |   1 = 1 -> true
'1abc'        |   1          |   1 = 1 -> true
'abc1'        |   1          |   0 = 1 -> false
票数 1
EN

Stack Overflow用户

发布于 2016-07-05 11:42:11

在MySQL中比较字符串和整数时,MySQL将字符串转换为整数。具体规则在文档中进行了描述。在您的例子中,这些将被比较为浮点数。

很容易将整数转换为浮点数。字符串转换使用隐式转换--字符串中遇到的第一个数字被转换。如果没有,则值为零。因此,'12.3abc'变成了12.3,'abc'变成了0。

这可能就是这种比较失败的原因。然而,我认为=会失败,而<>会成功。

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

https://stackoverflow.com/questions/38202527

复制
相关文章

相似问题

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