首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在mysql中,“无”怎么能等于0?

在mysql中,“无”怎么能等于0?
EN

Stack Overflow用户
提问于 2018-09-25 07:46:56
回答 2查看 1.1K关注 0票数 1

我发现在一个表中,value "None" is equal to 0

代码语言:javascript
复制
mysql> select distinct id from sometable where id="None";
+-------+
|  id   |
+-------+
|     0 |
+-------+

注意,id的类型是int(7)

虽然mysql中所有的值都显示为0,但是当我使用PyMySQL查询django中的记录时,其中一些是0,而另一些是unicode "None",这怎么会发生呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-09-25 08:16:36

MySQL与类型转换松散。当隐式地将字符串转换为数字时,只要字符串是数字,它就会从字符串的开头接受字符,而忽略其他字符。

在您的示例中,"None"不是数字,所以MySQL将返回0

来自Mysql 类型转换

对于字符串列与数字的比较,MySQL不能使用列上的索引来快速查找值。

隐式转换字符串对于性能来说是可怕的,因为您失去了可能在列上的索引上的用法。

下面是一个比较"2arse"字符串和2数字的示例,我们可以看到ID = "2arse"何时将返回ID = 2行数据,因为它将接受数字2,而忽略arse字符串隐式转换。

模式(MySQL v5.7)

代码语言:javascript
复制
CREATE TABLE sometable(
  ID INT
);
INSERT INTO sometable VALUES (0);
INSERT INTO sometable VALUES (2);

查询#1

代码语言:javascript
复制
select distinct id
from sometable
where ID = "2arse";

| id  |
| --- |
| 2   |

关于DB Fiddle的看法

票数 0
EN

Stack Overflow用户

发布于 2018-09-25 08:00:16

使用强制转换,然后进行比较。

代码语言:javascript
复制
select distinct id from sometable where cast(id AS SIGNED)=0
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52493102

复制
相关文章

相似问题

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