MYSQL中LIKE和=之间的区别?

Cli*_*ote 17 mysql

有什么区别

SELECT foo FROM bar WHERE foobar='$foo'
Run Code Online (Sandbox Code Playgroud)

SELECT foo FROM bar WHERE foobar LIKE'$foo'
Run Code Online (Sandbox Code Playgroud)

lav*_*nio 29

=在SQL中完全匹配.

LIKE进行通配符匹配,使用'%'作为多字符匹配符号,使用'_'作为单字符匹配符号.'\'是默认的转义字符.

foobar = '$foo'并且foobar LIKE '$foo'行为相同,因为两个字符串都不包含通配符.

foobar LIKE '%foo' 将匹配以'foo'结尾的任何内容.

LIKE还有一个ESCAPE子句,因此您可以设置转义字符.这将允许您在字符串中匹配文字'%'或'_'.你也可以NOT LIKE.

MySQL站点有关于LIKE运算符的文档.语法是

expression [NOT] LIKE pattern [ESCAPE 'escape']
Run Code Online (Sandbox Code Playgroud)


Jes*_*ert 19

LIKE可以进行通配符匹配:

SELECT foo FROM bar WHERE foobar LIKE "Foo%"
Run Code Online (Sandbox Code Playgroud)

如果您不需要模式匹配,则使用=而不是LIKE.它更快,更安全.(您正在使用参数化查询,对吧?)


eit*_*hed 6

请记住MySQL将根据情况进行转换:LIKE将执行字符串转换,而=将执行int转换.考虑到以下情况:

    (int)   (vchar2)
id  field1  field2
1   1       1
2   1       1,2
Run Code Online (Sandbox Code Playgroud)

SELECT*FROM as a LE testJOIN testas a b on a.field1 LIKE b.field2

会产生

id  field1  field2  id  field1  field2
1   1       1       1   1       1
2   1       1,2     1   1       1
Run Code Online (Sandbox Code Playgroud)

SELECT*FROM as a LE testJOIN testas a b on a.field1 = b.field2

会产生

id  field1  field2  id  field1  field2
1   1       1       1   1       1
1   1       1       2   1       1,2
2   1       1,2     1   1       1
2   1       1,2     2   1       1,2
Run Code Online (Sandbox Code Playgroud)