搞定MySQL数据库中文模糊检索问题
Jun 07, 2016 pm 04:16 PM在MySQL下,在进行中文模糊检索时,经常会返回一些与之不相关的记录,如查找%a%时,返回的可能有中文字符,却没有a字符存在。本人以前也曾遇到过类似问题,经详细阅读MySQL的Manual,发现可以有一种方法很方便的解决并得到满意的结果。 例子: 希望通过标题
在MySQL下,在进行中文模糊检索时,经常会返回一些与之不相关的记录,如查找“%a%”时,返回的可能有中文字符,却没有a字符存在。本人以前也曾遇到过类似问题,经详细阅读MySQL的Manual,发现可以有一种方法很方便的解决并得到满意的结果。
例子:
希望通过“标题”对新闻库进行检索,关键字可能包含是中英文,如下SQL语句:
QUOTE:
select id,title,name from achech_com.news where title like '%a%'
返回的结果,某些title字段确定带了“a”关键字,而有些则只有中文,但也随之返回在检索结果中。
解决方法,使用BINARY属性进行检索,如:
QUOTE:
select id,title,name from achech_com.news where binary title like '%a%'
返回的结果较之前正确,但英文字母区分大小写,,故有时在检索如“Achech”及“achech”的结果是不一样的。知道了使用BINARY属性可以解 决前面这个问题,再看看MySQL支持的UCASE及CONCAT函数,其中UCASE是将英文全部转成大写,而CONCAT函数的作用是对字符进行连 接,以下是我们完全解决后的SQL语句:
QUOTE:
select id,title,name from achech_com.news
where binary ucase(title) like concat('%',ucase('a'),'%')
检索的步骤是先将属性指定为BINARY,以精确检索结果,而被like的title内容存在大小写字母的可能,故先使用ucase函数将字段内容全部 转换成大写字母,然后再进行like操作,而like的操作使用模糊方法,使用concat的好处是传进来的可以是直接的关键字,不需要带“%”万用符, 将“'a'”直接换成你的变量,在任何语言下都万事无忧了。当然你也可以这么写:
QUOTE:
select id,title,name from achech_com.news where binary ucase(title) like ucase('%a%')
检索的结果还算满意吧,不过速度可能会因此而慢N毫秒。

Heißer Artikel

Hot-Tools-Tags

Heißer Artikel

Heiße Artikel -Tags

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

PHPs Fähigkeiten zur Verarbeitung von Big-Data-Strukturen

Wie optimiert man die MySQL-Abfrageleistung in PHP?

Wie verwende ich MySQL-Backup und -Wiederherstellung in PHP?

Wie füge ich mit PHP Daten in eine MySQL-Tabelle ein?

So beheben Sie den Fehler „mysql_native_password nicht geladen' unter MySQL 8.4

Wie verwende ich gespeicherte MySQL-Prozeduren in PHP?

Ausführliches Tutorial zum Herstellen einer Datenbankverbindung mit MySQLi in PHP

Wie erstelle ich eine MySQL-Tabelle mit PHP?
