Mysql将varchar视为int bug?

时间:2013-07-24 19:36:36

标签: mysql sql casting where

我刚刚运行了这个查询:

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

关键是mycol列是 varchar ,但我也将其视为 int 。 令我惊讶的是,where子句在表的所有行上评估为true,空或不。

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

1 个答案:

答案 0 :(得分:2)

这是MySQL中记录良好的行为。

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

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

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

Here是确切的引用:

  

通常,在数字上下文中将字符串转换为数值   除了使用字符串值之外,不必做任何其他事情   虽然它是一个数字:

     

的MySQL> SELECT 1 +'1';           - > 2