如何实现Mysql中的 match,against *** 作

如何实现Mysql中的 match,against  *** 作,第1张

如何实现Mysql中的 match,against *** 作

1.使用Mysql全文检索fulltext的先决条件

表的类型必须是MyISAM

建立全文检索的字段类型必须是char,varchar,text

2.建立全文检索先期配置

由于Mysql的默认配置是索引的词的长度是4,所以要支持中文单字的话,首先更改这个.

*Unix用户要修改my.cnf,一般此文件在/etc/my.cnf,如果没有找到,先查找一下find / -name 'my.cnf'

在 [mysqld] 位置内加入:

ft_min_word_len = 2

其它属性还有

ft_wordlist_charset = gbk

在使用mysql进行中文模糊查找时需要注意一些方面:

(如select * from mytable where mysqlname like "%中文%"),就象我现在一样,找到不应找到的行!

有一些朋友提出了解决办法,大致有两种:

其一,加字段属性binary(),

其二,改my.cfg启动参数为default-character-set =gbk(或gb2312).

我从问题的根本原因分析,

其一,字母大小不区分问题(通过方法一可以解决)

其二,这是大多数人没有想到的,我以前也没有想到,

例:

汉字“不”的第1、2字节ascii值分别为:178与187

汉字“安”的第1、2字节ascii值分别为:176与178

汉字“花”的第1、2字节ascii值分别为:187与168

聪明的人已经看出来了:在字符串“安花”中模糊查找字符“不”字时,mysql系统也会认为两者区配!

另外:

my.ini 文件中加入 default-character-set =gb2312 ,字段不要加 Binary 属性 ,执行 select * from mytable where mysqlname like "%不%"

ySQL 4.x以上提供了全文检索支持 MATCH ……AGAINST 模式(不区分大小写)

前提:建立全文索引的表的存储引擎类型必须为MyISAM

新建一个utf8 MyISAM类型的表并建立一个全文索引 :

其中FULLTEXT(title, body) 给title和body这两列建立全文索引,之后检索的时候注意必须同时指定这两列。

全文检索语法

+ 表示AND,即必须包含。- 表示NOT,即不包含。

apple和banana之间是空格,空格表示OR,即至少包含apple、banana中的一个。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/8632559.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-19
下一篇2023-04-19

发表评论

登录后才能评论

评论列表(0条)

    保存