MySQL Single Dash使用而不是等号

Jor*_*dan 3 mysql database syntax

我只是想知道是否有人知道之间的区别:

select*from database.user_table WHERE user_id-'user';

select*from database.user_table WHERE user_id ='user';

两者似乎都有效,但是,它们会返回不同的结果.

谢谢!

Gor*_*off 6

这取决于什么类型user_id.假设它是一个字符串,那么:

WHERE user_id = 'user'
Run Code Online (Sandbox Code Playgroud)

将返回行所在user_id的字符串'user'(或者可能使用大写字母,具体取决于数据库和列的排序规则).

当你这样做时:

WHERE user_id - 'user'
Run Code Online (Sandbox Code Playgroud)

然后发生了两件事.如果表达式求值为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.