在查询我的产品表时:
SELECT product_id FROM products WHERE product_id = 1701114;
我得到两行:1701114和1701114B。
但是在添加这样的单引号之后:
SELECT product_id FROM products WHERE product_id = '1701114';
我得到预期的单行结果。
product_id
列是VARCHAR
类型的主键,而未引用的值是数字,这可能是原因,但是相当令人惊讶的是,等号突然变为类似'LIKE'
答案 0 :(得分:1)
product_id
是表格中的字符串。但是1701114
是一个整数。现在DB做了什么?它将表中的字符串转换为数字以进行比较。
要做到这一点,MySQL从字符串的左到右开始并取所有数字并将它们变成一个数字。剩下的就被切断了。
因此'1701114B'
会转换为数字1701114
。
第二个查询比较2个字符串,不需要转换。
答案 1 :(得分:1)
您的列product_id
是varchar列。将它与整数(1701114
)而不是字符串('1701114'
)进行比较是一个非常糟糕的主意。
MySQL会默默地将product_id
值转换为数字,以便将它们与1701114
进行比较。在我看来,'1701114B'
不是数字,不应该转换为数字,但会引发错误。但是,MySQL开发人员决定将其从左到右进行转换并尽可能地进行转换。因此,他们将'1701114B'
转换为1701114
,因此意外匹配。