MySQL意外结果:“IN” - 句子(number,'string')在varchar列上 [英] MySQL Unexpected Results: "IN"-clause (number, 'string') on a varchar column

查看:757
本文介绍了MySQL意外结果:“IN” - 句子(number,'string')在varchar列上的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在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 an IN 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆