MySQL中文模糊检索问题的解决方法
mysql|解决|问题|中文
MySQL中文模糊检索问题的解决方法
来源:林兴陆
在 MySQL 下,在进行中文模糊检索时,经常会返回一些与之不相关的
记录,如查找 "-0x1.ebea4bfbffaacp-4%" 时,返回的可能有中文字符,却没有 a 字符存在。
本人以前也曾遇到过类似问题,经详细阅读 MySQL 的 Manual ,发现可以
有一种方法很方便的解决并得到满意的结果。
例子:
·希望通过“标题”对新闻库进行检索,关键字可能包含是中英文,如
下 SQL 语句:
select id,title,name from achech_com.news where title like '-0x1.ebea4bfbebe84p-4%'
返回的结果,某些 title 字段确定带了“a”关键字,而有些则只有中文,
但也随之返回在检索结果中。
解决方法,使用 BINARY 属性进行检索,如:
select id,title,name from achech_com.news where binary title like '-0x1.ebea4bfbebe84p-4%'
返回的结果较之前正确,但英文字母区分大小写,故有时在检索如“Achech”
及“achech”的结果是不一样的。
知道了使用 BINARY 属性可以解决前面这个问题,再看看 MySQL 支持的
UCASE 及 CONCAT 函数,其中 UCASE 是将英文全部转成大写,而 CONCAT 函
数的作用是对字符进行连接,以下是我们完全解决后的 SQL 语句:
select id,title,name from achech_com.news where binary ucase(title) like concat('%',ucase('a'),'%')
检索的步骤是先将属性指定为 BINARY ,以精确检索结果,而被 like 的 title
内容存在大小写字母的可能,故先使用 ucase 函数将字段内容全部转换成大
写字母,然后再进行 like 操作,而 like 的操作使用模糊方法,使用 concat
的好处是传进来的可以是直接的关键字,不需要带“%”万用符,将“'a'”直接
换成你的变量,在任何语言下都万事无忧了。
当然你也可以这么写:
select id,title,name from achech_com.news where binary ucase(title) like ucase('0x0.00020bfbebe08p-1022%')
检索的结果还算满意吧,不过速度可能会因此而慢N毫秒喔。
相关资料:
Relate:
20.16 Case Sensitivity in Searches
By default, MySQL searches are case-insensitive (although there are some character sets that are never case insensitive, such as czech). That means that if you search with col_name LIKE 'a%', you will get all column values that start with A or a. If you want to make this search case-sensitive, use something like INDEX(col_name, "A")=0 to check a prefix. Or use STRCMP(col_name, "A") = 0 if the column value must be exactly "A".

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











제목은 웹 페이지의 제목을 정의하는 의미로, 태그 내에 위치하며 브라우저의 제목 표시줄에 표시되는 텍스트입니다. 제목은 웹 페이지의 검색 엔진 최적화 및 사용자 경험에 매우 중요합니다. HTML 웹 페이지를 작성할 때 더 많은 사용자가 클릭하고 탐색하도록 유도하려면 관련 키워드와 매력적인 설명을 사용하여 제목 요소를 정의하는 데 주의를 기울여야 합니다.

php提交表单通过后,弹出的对话框怎样在当前页弹出php提交表单通过后,弹出的对话框怎样在当前页弹出而不是在空白页弹出?想实现这样的效果:而不是空白页弹出:------解决方案--------------------如果你的验证用PHP在后端,那么就用Ajax;仅供参考:HTML code

1. 일치하는 내용의 차이 LIKE는 전체 데이터가 일치해야 하며 REGEXP는 부분 일치만 필요하며 하나의 조각만 충족하면 됩니다. 2. 일치 위치의 차이점: LIKE는 전체 열과 일치합니다. 일치하는 텍스트가 열 값에 나타나면 LIKE는 이를 찾지 않으며 해당 행은 반환되지 않습니다(REGEXP가 열 값 내에 사용되지 않는 한). 일치하는 텍스트가 열 값에 나타나면 REGEXP는 이를 찾아 해당 행을 반환하고 REGEXP는 전체 열 값을 일치시킬 수 있습니다(LIKE와 동일한 효과). 3. SQL 문은 LIKE 일치와 다른 데이터를 반환합니다: SQL 문

HTML의 제목은 웹페이지의 제목 태그를 표시하여 뷰어가 현재 페이지의 주요 내용을 알 수 있도록 하므로 각 웹페이지에는 별도의 제목이 있어야 합니다.

LIKE 연산자는 WHERE 절의 열에서 지정된 패턴을 검색하는 데 사용됩니다. 구문: SELECTcolumn_name(s)FROMtable_nameWHEREcolumn_nameLIKEpatternpattern 지정된 템플릿이 배치되는 위치이며 여기서는 와일드카드 문자 %라고도 하는 "%"가 사용됩니다. 조건 앞에 배치되면 ..로 끝나는 데이터를 검색합니다. .; 예: % Li %가 조건 뒤에 오면...으로 시작하는 데이터가 검색됩니다. 예: Li %%가 조건 앞뒤에 있으면 포함된 데이터가 검색됩니다. 리% 지식 포인트 : ERROR1064 (42000):Youhaveane

Union을 사용하여 Like 문 최적화 1) 쿼리에서 비교를 위해 or 연산자를 사용해야 하는 경우가 있습니다. where 절에서 or 키워드가 너무 자주 사용되면 MySQL 최적화 프로그램이 실수로 레코드를 검색하기 위해 전체 테이블 스캔을 선택하게 될 수 있습니다. Union 절을 사용하면 특히 쿼리 중 하나에 최적화된 인덱스가 있고 다른 쿼리에도 최적화된 인덱스가 있는 경우 쿼리 실행 속도가 빨라집니다. 예를 들어 각각 first_name과 last_name에 인덱스가 있는 경우 다음 쿼리 문을 실행합니다. mysql>select*fromstudentswherefirst_namelike'A

图片消失如何解决先是图片文件上传$file=$_FILES['userfile']; if(is_uploaded_file($file['tmp_name'])){$query=mysql_query("INSERT INTO gdb_banner(image_src ) VALUES ('images/{$file['name'

不用数据库来实现用户的简单的下载,代码如下,但是却不能下载,请高手找下原因,文件路劲什么的没问题。
