以下3个查询将返回相同的记录:
SELECT * FROM items WHERE id = '1'
SELECT * FROM items WHERE id = '1 foo'
SELECT * FROM items WHERE id = '1 123'
似乎忽略了引号中空格后面的字符。
这是一个功能,它的目的是什么?
答案 0 :(得分:6)
由于id
是一个数字,当MySql将字符串转换为数字时,它们都会产生相同的结果:数字1
。
SELECT CAST('1' AS SIGNED) a,
CAST('1 foo' AS SIGNED) b,
CAST('1 123' AS SIGNED) c
结果:
a | b | c
1 | 1 | 1
答案 1 :(得分:1)
This page表示mysql隐式地将字符串强制转换为数字,反之亦然。该页面示例说明了这一点:
mysql> SELECT 1 > '6x';
-> 0
mysql> SELECT 7 > '6x';
-> 1
mysql> SELECT 0 > 'x6';
-> 0
mysql> SELECT 0 = 'x6';
-> 1
在您的情况下,所有字符串都隐式地转换为数字1。
答案 2 :(得分:0)
我认为您提供的'字符串'正在转换为数字,因为id字段可能是一个整数。 如果是这种情况,那么转换将在到达非数字字符时停止,这就是空间。因此,所有字符串都转换为数字1并返回相同的行。