在MySQL中,“ None”如何等于0?

时间:2018-09-25 07:46:56

标签: mysql sql type-conversion

我发现value "None" is equal to 0

在一张桌子上
mysql> select distinct id from sometable where id="None";
+-------+
|  id   |
+-------+
|     0 |
+-------+

请注意,id的类型为int(7)

尽管在mysql客户端中所有值都显示为0,但是当我使用PyMySQL查询django中的记录时,其中一些为0,而另一些为unicode“ None”,

2 个答案:

答案 0 :(得分:0)

使用强制转换为int然后进行比较

select distinct id from sometable where cast(id AS SIGNED)=0

答案 1 :(得分:0)

MySQL缺乏类型转换功能。将字符串隐式转换为数字时,只要它们是数字,它将从字符串的开头开始取字符,而忽略其他字符。

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

从Mysql type-conversion

  

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

简单地转换字符串对于性能而言是可怕的,因为您失去了列上可能使用的索引的使用


这里是一个示例,用于比较"2arse"字符串和2的数字,我们可以看到ID = "2arse"何时返回ID = 2行数据,因为它将使用数字{{1} },并忽略2字符串以进行隐式转换。

模式(MySQL v5.7)

arse

查询#1

CREATE TABLE sometable(
  ID INT
);
INSERT INTO sometable VALUES (0);
INSERT INTO sometable VALUES (2);

View on DB Fiddle