MySQL LIKE 模糊匹配不区分大小写,如何避免误匹配?

默认情况下,MySQL LIKE 不区分大小写。
如果您想要精确匹配,请使用 BINARY。
例如,如果您要搜索“Tina Rodriguez”并且不添加 BINARY,您将得到错误匹配。
BINARY就像一个放大镜,只看字面意思,不区分大小写。
另外,LIKE无法计算匹配百分比,而仅考虑模式长度和连续性。
为了精确控制,请使用 BINARY、常规或全文索引。

使用mybatisplus条件查询当输入_模糊匹配查出的是全部内容

说起MyBatis-Plus的这个坑,我其实已经踩过好几次了。
记得去年的一个项目中我使用MyBatis-Plus来做条件查询。
本来想用下划线进行模糊匹配,结果整个表都出来了。
我很困惑!
那时我开始检查,首先看看下划线是否没有被转义。
你知道我当时做了什么吗?我在SQL中尝试了不同的方法,最后发现在MySQL中你必须在下划线之前添加一个反斜杠,就像这样:LIKE '%\_value%'。
这真的让我笑了。
为什么这个数据库这么小气?下划线与其他的不同。

然后又开始检查字段映射,因为有时候团队命名不规范,实体类和数据库表字段不一致,这种情况是比较常见的。
我使用 @TableField("your_column_name") 注释来确保字段名称正确。
幸运的是,这次不是地图问题。

最后我还发现可能是因为数据库方言的问题。
我使用的数据库是MySQL,但是我的项目中配置的方言是Oracle。
这也太搞笑了吧。
我把配置文件中的方言改回来,问题就解决了。

总结一下,这个模糊匹配下划线的问题可能是由于下划线没有转义、字段映射不正确或者SQL方言不正确造成的。
解决方案是转义下划线、检查映射并配置数据库方言。
我在这方面确实踩过很多坑,以后一定要小心。

MySQL高效实现模糊查询--28条优化建议

上周有客户问我如何优化MySQL的模糊查询,我直接给他发了这2 8 条优化建议。
这些建议确实很实用。
下面我给大家简单介绍一下:
1 .首先,停止使用LIKE '%keyword%'这种全表扫描操作,换成LIKE 'keyword%',这样索引就可以使用了。

2 您可以使用 LOCATE、POSITION 和 INSTR 等函数,它们可以更快地匹配索引字段。

3 在 WHERE 子句中,不要使用 != 或,用 = 代替,并避免使用 OR。
它必须分成几个不同的请求。

4 全文检索是一个很好的方法,尤其是模糊全表扫描查询。

5 尝试对 IN 和 NOT IN 使用 BETWEEN,或者如果集合很小,则将其拆分为多个 OR。

6 避免在 WHERE 中使用参数以及对字段进行表达式或函数操作,这会使索引失效。

7 索引字段的顺序必须与查询条件一致,尤其是复合索引。

8 应避免无意义的查询,例如 SELECT INTO t FROM t WHERE 1 =0。

9 EXISTS 有时比 IN 更有效。

1 0索引越多越好。
索引过多会影响插入和更新。

1 1 更新聚集索引数据列会降低效率。

1 2 数字字段的查询效率高于字符字段。

1 3 使用VARCHAR或NVARCHAR代替CHAR或NCHAR,变长字段效率更高。

1 4 不要使用 SELECT,仅返回必填字段。

1 5 表变量有时比临时表更有效。

1 6 避免频繁创建和删除临时表。

1 7 适当使用临时表,特别是对于需要重复引用的大型数据集。

1 8 SELECT INTO 比 CREATE TABLE 和 INSERT 更高效。

1 9 显式删除临时表以避免长期锁定。

2 0。
游标效率不高,因此请尝试使用集合操作。

2 1 小数据集可以使用 FAST_FORWARD 滑块。

2 2 在存储过程和触发器中使用 SET NOCOUNT ON。

2 3 避免将大量数据发送回客户端。

2 4 避免大额交易交易。

2 5 这些方法要根据实际情况综合运用。

这些建议都是基于真实经验。
听完他们的讲述后,客户发现他们非常有帮助。
无论哪种方式,您都可以根据自己的具体情况进行调整。
我还在想这个问题。
也许未来会有新的优化技术。