我刚刚运行了这个查询:
UPDATE mytable SET mycol='text' WHERE mycol=0;
关键是该列mycol
是varchar,但我也将其视为int。令我惊讶的是,where 子句在表的所有行上评估为真,无论是否为空。
那么,为什么非空字符串比较等于整数零呢?
这是 MySQL 中非常有据可查的行为。
当在调用数字的上下文中遇到字符串时,MySQL 将字符串转换为数字,从字符串开头的数字开始。当没有数字时它停止。因此,没有数字的字符串变为 0。
如果要进行适当的比较,请使用单引号:
UPDATE mytable SET mycol='text' WHERE mycol = '0';
这是确切的报价:
要将字符串转换为数字上下文中的数值,您通常无需执行任何操作,只需将字符串值当作数字使用:
mysql> 选择 1+'1'; -> 2