2010-11-29 172 views
2
mysql> SELECT 'a'='b'='c'; 
+-------------+ 
| 'a'='b'='c' | 
+-------------+ 
|   1 | 
+-------------+ 
mysql> select 'a'=0, 'b'='c'; 
+-------+---------+ 
| 'a'=0 | 'b'='c' | 
+-------+---------+ 
|  1 |  0 | 
+-------+---------+ 

为什么'a'在MySQL中等于0?为什么`select'a'= 0;`1的结果?

回答

2

TEXT值通过解释转换为整数值所有的前导数字都是数字。如果没有数字,它转换为0

所以:

'123a' = 123 
'4a' = 4 
'a' = 0 
1

我相信MySQL调用atoi()或类似的字符串'a',这等于0.什么select 'a'=1给?

+0

这看起来像一个坚实的答案。 'SELECT'a'= 1'和'SELECT'a'= 2'是0,但是'SELECT'a'= 0'是1。 – Matchu 2010-11-29 01:13:57

2

当您将字符串文字与数字值进行比较时,MySQL必须将字符串文字转换为数字值,以便进行比较。由于'a'不是一个数字,因此得到的值为零 - 因此相等。当比较'b'和'c'时,两个操作数都是字符串,所以不发生转换并且结果为假(0)。

在代码的第一个表达式可以改写为:

('a' = 'b') = 'c' 

由于(“A” =“b”)的返回0,该操作发生之后,你的表达将被解释为

0 = 'c' 

因为我上面解释过的原因,这是1。顺便说一下,此表达式:

'a' = 0 = 'c' 

返回false,因为( 'A'= 0)返回1,然后(1 = 'C')返回0

1

this page MySQL的文档。

在“B” =“C”的情况下,通过该规则支配:

如果在一个比较操作的两个参数是字符串,它们相当于字符串。

由于它们是不同的字符串,结果是错误的。

的“a” = 0的情况下由该规则支配:

在所有其他情况下,所述参数被比较,浮点(实数)的数字

双方都是比较转换为浮点数,并且由于'a'不包含任何数字,所以它的计算结果为零,就像右边的数字0一样,所以它们被认为是相等的。