MySQL意外结果:“IN” - 句子(number,'string')在varchar列上 [英] MySQL Unexpected Results: "IN"-clause (number, 'string') on a varchar column
问题描述
在MySQL中,为什么下面的查询返回'----'
,'0'
code>'000','AK3462'
,'AL11111'
'C131521'
,'TEST'
等等。
In MySQL, why does the following query return '----'
, '0'
, '000'
, 'AK3462'
, 'AL11111'
, 'C131521'
, 'TEST'
, etc.?
select varCharColumn from myTable where varCharColumn in (-1, '');
当我这样做时,我得不到这些结果:
I get none of these results when I do:
select varCharColumn from myTable where varCharColumn in (-1);
select varCharColumn from myTable where varCharColumn in ('');
注意:我使用MySQL版本5.0.45-log(显示变量如%version%;
)
Note: I'm using MySQL version 5.0.45-log (show variables like "%version%";
)
注意2:我也在数字列上尝试过,但我没有得到意想不到的结果。
Note 2: I tried this on a number column as well, but I do not get unexpected results there.
推荐答案
如比较函数和运算符:
不要在
IN
列表,因为引用值(如字符串)和非引号值(如数字)的比较规则不同。因此,混合类型可能导致不一致的结果。例如,不要写如下的IN
表达式:
You should never mix quoted and unquoted values in an
IN
list because the comparison rules for quoted values (such as strings) and unquoted values (such as numbers) differ. Mixing types may therefore lead to inconsistent results. For example, do not write anIN
expression like this:
SELECT val1 FROM tbl1 WHERE val1 IN (1,2,'a');
Instead, write it like this:
SELECT val1 FROM tbl1 WHERE val1 IN ('1','2','a');
这篇关于MySQL意外结果:“IN” - 句子(number,'string')在varchar列上的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!