我有一个ID字段为INT Type的表。
我正在做一些数据验证并注意到
SELECT * from mytable where id=94
和
SELECT * from mytable where id='94'
效果很好,但如果我使用
SELECT * from mytable where id='94dssdfdfgsdfg2'
它给了我同样的结果!这怎么可能?
答案 0 :(得分:4)
如果MySql的字符串到int函数的内部实现在解析它时在第一个非数字后删掉字符串中的所有字符,那么这是可能的。
答案 1 :(得分:1)
您目睹的内容称为“隐式数据转换”。
隐式,与“显式”相反,意味着数据类型会在可能的情况下自动转换为要比较的列的数据类型。在这种情况下,MYTABLE.id
是一个INTeger数据类型,因此如果将数据包括在单引号中(基于字符串的数据类型为SQL),MySQL将把所比较的值转换为INT。
由于转换,从字符串中最左边的位置开始,数据在最后一个数字字符的末尾被截断。