我有一个ID类型为INT类型的表格。奇怪的选择结果
我做了一些数据验证,发现
SELECT * from mytable where id=94
和
SELECT * from mytable where id='94'
作品完美,但如果我用
SELECT * from mytable where id='94dssdfdfgsdfg2'
它给了我同样的结果!这怎么可能?
我有一个ID类型为INT类型的表格。奇怪的选择结果
我做了一些数据验证,发现
SELECT * from mytable where id=94
和
SELECT * from mytable where id='94'
作品完美,但如果我用
SELECT * from mytable where id='94dssdfdfgsdfg2'
它给了我同样的结果!这怎么可能?
你目睹的所谓“隐式数据转换”。
隐式,与“显式”相反,意味着数据类型会自动转换为被比较列的数据类型(如果可能)。在这种情况下,MYTABLE.id
是一个INTeger数据类型,因此如果用单引号括起来(基于字符串的数据类型为SQL),MySQL会将所比较的值转换为INT。
由于转换,从字符串中最左边的位置开始,数据在最后一个数字字符的末尾被截断。
如果这是一个谜题,可能是他们都没有结果。 – recursive 2010-09-13 21:23:49