我发现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”,
答案 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);