mysql模糊查询可以查中文
原
2018-08-21 20:57:33 zhenwei1994 阅读数 23346
1、常见用法:
(1)搭配%使用
%代表一个或多个字符的通配符,譬如查询字段name中以大开头的数据:
(2)搭配_使用
_代表仅仅一个字符的通配符,把上面那条查询语句中的%改为_,会发现只能查询出下面一条数据:
2、使用like模糊查询会导致索引失效,在数据量大的时候会有性能问题
(1)尽量少以%或者_开头进行模糊查询
通过explain执行计划,我们发现,使用like模糊查询时,如果不以%和_开头查询的话,索引还是有效的
以%或者_开头查询,索引失效
(2)使用覆盖索引
当查询的的条件和查询的结果都是索引中的字段的时候,这个索引我们可以称之为覆盖索引,这个时候,使用like模糊查询索引是有效的
InnoDB中主键可以不添加进索引中
注意:使用覆盖索引,对于字段的长度是由要求限制的,一般超过长度,索引也会失效
这里如果我查询中带有descripition字段,则覆盖索引也会失效(我这里的数据库经过测试最多只支持255长度的字段)
(3)使用全文索引
给字段建立Full Text索引,然后使用match(...) against(...)进行检索
注意:这种全文索引方式只对英文单词起作用,对于中文汉字支持不够友好,需要额外去mysql的配置文件做一些配置修改,让它额外支持中文
(4)使用一些额外的全文搜索引擎来解决
Lucene,solr,elasticsearch等等
基本原理是:把mysql配置文件中的ft_min_word_len=3改为1。(没有这项就直接添加),然后新建一个字段来保持分词结果,给这个字段建立全文索引。然后实现一个分词模块,把词语“大家好”拆分为“大 大家 大家好 家 家好 好”。然后用match .. against 来代替like %%,查询出来的结果跟like的结果基本相同(如果分词合理的话),但是效率比like高至少10倍以上。
2018-06-16 08:42:47 silenceray 阅读数 883
今天朋友问了个问题,在使用mysql数据库进行模糊查询的时候,where条件中使用了中文,查出来的结果并不是正确的结果。
SELECT * FROM table_name WHERE name LIKE '%乐%'; 查询出的结果中包含没有“乐”的。
解决方法:经测试发现是实际插入的数据对实际插入的数据和这个表中这个字段 所设置的collation(字符序)有关系,也和collation_connection的设置也有关系,先查询此表以上的两种设置,做对应的修改即可。
如这次遇到的问题的解决语句:
alter table a modify fullname varchar(200) CHARACTER set utf-8 COLLATE utf8_bin not null default
Mysql数据库查询条件是中文时,查询不到数据。
string sql = "select * from t_grade where gradeName like '%"+grade.getGradeName()+"%';
当grade.getGradeName()为英文或者为数字时候是可以查找到结果的,当为中文时候,查询不到。
页面显示是 :utf-8;
解决方法:找到mysql中的my.ini 文件
在[mysql]下面添加: default-character-set=utf8
在[client]下面添加:default-character-set=utf8
在[mysqld]下面添加:character-set-server=utf8
既可以了。
————————————————
版权声明:本文为CSDN博主「honyliu」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_37468234/java/article/details/80247910