我刚刚运行了这个查询:
UPDATE mytable SET mycol='text' WHERE mycol=0;
关键是mycol
列是 varchar ,但我也将其视为 int 。
令我惊讶的是,where子句在表的所有行上评估为true,空或不。
那么,为什么非空字符串比较等于整数0?
答案 0 :(得分:2)
这是MySQL中记录良好的行为。
当在调用数字的上下文中遇到字符串时,MySQL会将字符串转换为数字,从字符串开头的数字开始。没有数字时停止。因此,没有数字的字符串变为0。
如果您想进行适当的比较,请使用单引号:
UPDATE mytable SET mycol='text' WHERE mycol = '0';
Here是确切的引用:
通常,在数字上下文中将字符串转换为数值 除了使用字符串值之外,不必做任何其他事情 虽然它是一个数字:
的MySQL> SELECT 1 +'1'; - > 2