龙空技术网

mysql简体、繁体、简体混合搜索方案

爱生活的码农小刘 88

前言:

如今同学们对“mysql中文匹配”可能比较珍视,大家都想要学习一些“mysql中文匹配”的相关资讯。那么小编也在网上收集了一些关于“mysql中文匹配””的相关内容,希望大家能喜欢,小伙伴们快快来了解一下吧!

需求:搜索条件支持用户输入简体或者繁体或者简体繁体混合,同时数据库中字段存储也存在 简体、繁体、简体繁体混合。

解决方案采用如下sql语句

SELECT * FROM table WHERE field REGEXP '[关键词|關鍵詞]';

能搜索出

        关键词        關鍵詞        關鍵词

原理

正则表达式中的 "|" 表示或的意思,所以:"關鍵詞|关键词"表示匹配字符串为 "關鍵詞" 或 "关键词"。当字段值为"關鍵词"时,它既包含了"關鍵詞"也包含了"关键词"。所以使用这个正则表达式可以匹配包含简体和繁体混合的字段值。具体原理是:"關鍵詞" 可以完全匹配 "關鍵詞""关键词" 可以部分匹配 "關鍵词" 的 "词"根据正则表达式的匹配规则,只要有一种匹配形式成功,就算整体匹配成功所以 "關鍵詞" 既可以完全匹配 "關鍵詞",也可以部分匹配 "关键词",因此整个表达式可以匹配混合简繁体的字段综上,通过构建交叉的简繁体正则模式,利用正则表达式的匹配规则,可以实现对应混合简繁体字段的值进行匹配。

正则还可以继续使用其他写法

.:匹配任意单个字符。^:匹配字符串的开头。$:匹配字符串的结尾。*:匹配前一个字符零次或多次。+:匹配前一个字符一次或多次。?:匹配前一个字符零次或一次。[]:匹配括号内的任意一个字符。[^]:匹配不在括号内的任意一个字符。():捕获子模式。|:用于逻辑或操作符。

默认情况下,REGEXP是区分大小写的。如果需要进行不区分大小写的匹配,可以使用REGEXP BINARY

SELECT column_nameFROM table_nameWHERE column_name REGEXP BINARY 'pattern';
注意安全性:

在使用 REGEXP 时,要注意防止正则表达式注入攻击。类似于 SQL 注入攻击,正则表达式注入攻击可能会导致安全漏洞。要避免这种情况,建议对输入的数据进行严格的验证和过滤,确保只有可信的数据才被用于构建正则表达式。

标签: #mysql中文匹配