首页
学习
活动
专区
圈层
工具
发布

mysql 模糊查询中文

基础概念

MySQL中的模糊查询是通过LIKE关键字实现的,它允许使用通配符来匹配字符串中的数据。对于中文字符的模糊查询,需要注意字符集和排序规则的正确配置,以确保查询结果的准确性。

相关优势

  1. 灵活性:模糊查询提供了多种通配符,如%_,可以灵活地匹配各种模式。
  2. 广泛适用性:适用于各种文本数据的搜索,包括中文字符。

类型

  1. %通配符:表示任意数量的字符,包括零个字符。
  2. %通配符:表示任意数量的字符,包括零个字符。
  3. _通配符**:表示单个字符。
  4. _通配符**:表示单个字符。

应用场景

模糊查询常用于搜索包含特定关键词的数据,例如:

  • 搜索包含某个名字的客户信息。
  • 搜索包含某个关键词的文章。

遇到的问题及解决方法

问题:为什么模糊查询中文时结果不准确?

原因

  1. 字符集和排序规则:MySQL默认的字符集可能不支持中文,或者排序规则不正确,导致查询结果不准确。
  2. 索引问题:模糊查询通常无法利用索引,导致查询效率低下。

解决方法

  1. 配置正确的字符集和排序规则
  2. 配置正确的字符集和排序规则
  3. 这里使用了utf8mb4字符集和utf8mb4_general_ci排序规则,支持中文字符。
  4. 优化查询
    • 尽量避免在模糊查询中使用前导通配符,因为这会导致无法利用索引。
    • 使用全文索引(如果适用):
    • 使用全文索引(如果适用):

示例代码

代码语言:txt
复制
-- 创建表并配置字符集和排序规则
CREATE TABLE users (
    id INT PRIMARY KEY,
    name VARCHAR(255)
) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

-- 插入示例数据
INSERT INTO users (id, name) VALUES (1, '张三'), (2, '李四'), (3, '王五');

-- 模糊查询包含“张”的名字
SELECT * FROM users WHERE name LIKE '%张%';

参考链接

通过以上配置和优化,可以确保MySQL在模糊查询中文时结果的准确性和查询效率。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • MySQL 模糊查询:MySQL 数据库 like 语句通配符模糊查询小结

    MySQL 报错:Parameter index out of range (1 > number of parameters, which is 0)——MySQL 数据库 like 语句通配符模糊查询小结...文章目录 MySQL 报错:Parameter index out of range (1 > number of parameters, which is 0)——MySQL 数据库 like 语句通配符模糊查询小结...、like 语句的应用场景 2.2、模糊查询剖析 2.3、正确语句 三、MyBatis like 模糊查询及关键字区分 总结 ---- 前言 今天在使用 MySQL 语句执行增删改查操作时,控制台报出了以下错误...的格式,注意是在英文输入法下输入,非中文问号; 检查 SQL 语句,使用通配符传递的参数是不加引号的,比如下面的就是错误的: String sql = "select count(*) from tab_route...二、like 语句使用通配符模糊查询剖析 2.1、like 语句的应用场景 使用 like 通配符进行模糊查询是我们在项目中常遇到的,比如在搜索框中对于数据的模糊查询。

    18.4K40

    MySQL模糊查询性能优化

    结论写在最前面 用户基数估计 模糊查找接口qps估计 数据检索量估计 支持分布式搜索 支持短语搜索 支持分词 上述每一项都将是决定我们模糊查询最终的实现方案 业务场景分析 根据 模糊查找 的业务场景,比对一下上面列出的...业务背景 我们团队接到一个IEG市场部的一个内部系统开发,系统内填写工单时需要根据 rtx, 拼音, 中文名 模糊匹配用户,没错!...Staffs表结构&查询接口 将员工数据导入到MySQL之后,共有 59066 条数据,大家重点关注 rtx,pinyin,chn_name 这三个字段,其他都是辅助字段,不参与查询业务。...全文索引解决不了中文分词,不过人是活的嘛~要会变通~在代码层,我们可做出如下逻辑: 如果用户输入参数不包含中文,则默认其搜索rtx或拼音,使用全文索引查询; 如果用户输入参数包含中文,则使用LIKE %...%查询中文名字段; 关键字查询接口返回结果做Redis缓存,缓存时间为120分钟; 所以我的解决方式:使用全文索引优化rtx和拼音的模糊查询,中文的模糊查询继续使用**LIKE %%**,最后再加一个Redis

    34.2K2216

    Mysql 模糊查询 like 语句

    mysql模糊查询like语句 like语句用于模糊查询符合条件的语句 %代表 若干个字符 _代表一个单词 查询使用like语句的语法是: select 字段名 from 表名 where 字段名...like '需要模糊查询的对象' 如果需要查询第二位字母是q的字段,那么like后面可以跟'_q%' 如果需要模糊查询的字符当中有'_',那么可以使用转义字符。...如果需要查询第二位字符是_的字段,那么like后面可以跟 '__%' 例如,我们现在有如下的一张表 +-------+--------+----------+------+------------+-...'M' 的人的姓名的时候,我们可以使用以下语句进行查询。...select ename from emp where ename like '_m%'; 使用上述语句查询的结果为 +-------+ | ename | +-------+ | SMITH | +-

    7.2K30

    如何加快MySQL模糊匹配查询

    有时我会看到条件如下的模式匹配查询:“其中的字段名像'%something%'”。 MySQL不能为这些查询使用到索引,这意味着它必须每次都进行一次全表扫描。...通过以下查询,我们可以使用n.pierre查找所有email地址: ? ? 它不必读取整个表格,但仍需要读取很多行,甚至使用filesort。...由于前导%,MySQL不能使用索引。 我们如何避免这种情况? 让我们保存我们可能要查找的email地址的所有可能版本。 短路方法 ? 嗯...可以工作吗? 我们来测试一下。...结论 如果MySQL中没有内置的解决方案或索引可以帮助或解决您的问题,请不要放弃。很多时候,只需稍作修改,您就可以创建自己的索引表或使用其他技巧。...在这种特殊情况下,如果您愿意牺牲一些额外的磁盘空间,您可以使用正确的方法加快查询速度。 Trigram并不是最好的选择,但我可以看到可能更好的用例。

    5.1K50

    mysql之模糊查询的方法

    Mysql模糊查询正常情况下在数据量小的时候,速度还是可以的,但是不容易看出查询的效率,在数据量达到百万级,千万级的甚至亿级时 mysql查询的效率是很关键的,也是很重要的。...一、一般情况下 like 模糊查询的写法:前后模糊匹配 这个SQL语句,如果用explain解释的话,我们很容易就能发觉它是没有走索引搜索,而是对全表进行了扫描,这显然是很慢的,还有卡库的可能。...如果将上面的SQL语句改成下面的写法: 就是把‘keyword’前面的%去掉了,这样的写法用explain解释看到,SQL语句使用了索引,这样就可以大大的提高查询的效率。...有时候,我们在做模糊查询的时候,并非要想查询的关键词都在开头,所以如果不是特别的要求,”keywork%”并不合适所有的模糊查询。...二、模糊查询高效的方法: 1、LOCATE(’substr’,str,pos)方法 解释:返回 substr 在 str 中第一次出现的位置,如果 substr 在 str 中不存在,返回值为 0 。

    4.5K50

    Mysql全文索引实现模糊查询

    导语 基本上所有的产品都离不开模糊搜索,无论是C端的社交产品、或者B端的一些SaaS服务。...众所周知的问题是,LIKE命令在数据量大的时候性能特别低,甚至大数据量下的一个LIKE查询可以拖垮整个DB,这是因为LIKE语句是不能利用索引的。...如果也借用ES这一套来做当然是可以的,但是从开发时间和精力的角度,显然有点得不偿失,那么在这种场景下,我们如何实现模糊搜索。...在MySQL 5.7.6之前,全文索引只支持英文全文索引,不支持中文全文索引,需要利用分词器把中文段落预处理拆分成单词,然后存入数据库。...因为中文单词最少是两个汉字,推荐使用默认值2,不过这个也看使用场景,很多时候单字搜索也是必要的。

    14.7K41

    Mysql常用sql语句(9)- like 模糊查询

    测试必备的Mysql常用sql语句系列 https://www.cnblogs.com/poloyy/category/1683347.html 前言 like应该是最常用的查询条件了 必须滴掌握!...% 通配符查询的栗子 应该是最常用的通配符了,它代表任意长度的字符串,包括0 % 比如: 表示以字母 a 开头,以字母 b 结尾的任意长度的字符串;该字符串可以代表 ab、acb、accb、accrb...等字符串 a%b 查询username字段包含test的记录 select * from yyTest where username like "%test%"; ?...查询username字段开头不为test且department字段不等于seewo的记录 select * from yyTest where username not like "test%" and...binary关键字的话,大小写是不敏感的 注意头部、尾部多余的空格: 是不会匹配到“test1”的 " test% " 注意NULL:通配符是不能匹配到字段为NULL的记录的 不要过度使用通配符:因为Mysql

    5K20

    搞定MySQL数据库中文模糊检索问题

    在 MySQL下,在进行中文模糊检索时,经常会返回一些与之不相关的记录,如查找 "%a%" 时,返回的可能有中文字符,却没有a字符存在。...本人以前也曾遇到过类似问题,经详细阅读MySQL的Manual,发现可以有一种方法很方便的解决并得到满意的结果。   ...  select id,title,name from achech_com.news where title like '%a%'   返回的结果,某些title字段确定带了“a”关键字,而有些则只有中文...知道了使用 BINARY 属性可以解决前面这个问题,再看看 MySQL 支持的UCASE 及 CONCAT 函数,其中 UCASE 是将英文全部转成大写,而CONCAT函数的作用是对字符进行连接,以下是我们完全解决后的...检索的步骤是先将属性指定为 BINARY ,以精确检索结果,而被 like 的 title内容存在大小写字母的可能,故先使用 ucase 函数将字段内容全部转换成大写字母,然后再进行 like 操作,而 like 的操作使用模糊方法

    2.8K20
    领券