0

我刚刚运行了这个查询:

UPDATE mytable SET mycol='text' WHERE mycol=0;

关键是该列mycolvarchar,但我也将其视为int。令我惊讶的是,where 子句在表的所有行上评估为真,无论是否为空。

那么,为什么非空字符串比较等于整数零呢?

4

1 回答 1

2

这是 MySQL 中非常有据可查的行为。

当在调用数字的上下文中遇到字符串时,MySQL 将字符串转换为数字,从字符串开头的数字开始。当没有数字时它停止。因此,没有数字的字符串变为 0。

如果要进行适当的比较,请使用单引号:

UPDATE mytable SET mycol='text' WHERE mycol = '0';

是确切的报价:

要将字符串转换为数字上下文中的数值,您通常无需执行任何操作,只需将字符串值当作数字使用:

mysql> 选择 1+'1'; -> 2

于 2013-07-24T19:39:54.847 回答