2010-09-13 91 views
2

我有一个ID类型为INT类型的表格。奇怪的选择结果

我做了一些数据验证,发现

SELECT * from mytable where id=94 

SELECT * from mytable where id='94' 

作品完美,但如果我用

SELECT * from mytable where id='94dssdfdfgsdfg2' 

它给了我同样的结果!这怎么可能?

+0

如果这是一个谜题,可能是他们都没有结果。 – recursive 2010-09-13 21:23:49

回答

4

如果将MySql的字符串内部实现为int函数,则在解析该函数​​时,可能会在第一个非数字后的字符串中删除所有字符。

+0

+1:它的作用。 – NotMe 2010-09-13 21:23:29

1

你目睹的所谓“隐式数据转换”。

隐式,与“显式”相反,意味着数据类型会自动转换为被比较列的数据类型(如果可能)。在这种情况下,MYTABLE.id是一个INTeger数据类型,因此如果用单引号括起来(基于字符串的数据类型为SQL),MySQL会将所比较的值转换为INT。

由于转换,从字符串中最左边的位置开始,数据在最后一个数字字符的末尾被截断。