我只是想知道是否有人知道它们之间的区别:
select * from database.user_table WHERE user_id-'user';
和
select * from database.user_table WHERE user_id ='user';
两者似乎都有效,但是,它们会返回不同的结果。
谢谢!
答案 0 :(得分:6)
这取决于user_id
的类型。假设它是一个字符串,那么:
WHERE user_id = 'user'
将返回user_id
为字符串'user'
的行(或者可能使用大写字母,具体取决于数据库和列的排序规则)。
当你这样做时:
WHERE user_id - 'user'
然后发生了两件事。如果表达式的计算结果为0
或(NULL
),则该行将被过滤掉。这相当于WHERE user_id - 'user' <> 0
。
-
是一个数字运算符,因此两个值都转换为数字。 MySQL使用静默转换方法,其中转换前导“数字”。因此,'user'
将转换为0
(无前导数字或数字类型字符)。 'user_id'
也将被转换。在这种情况下,基本上以数字开头的任何user_id
都将通过测试(以及以小数点开头的大多数)。
如果user_id
是整数,则user_id = 'user_id'
与user_id = 0
相同。 user_id - 'user'
与user_id <> 0
相同。