在 MySQL下在進行中文模糊檢索時經常會返回一些與之不相關的記錄如查找 %a% 時返回的可能有中文字符卻沒有a字符存在本人以前也曾遇到過類似問題經詳細閱讀MySQL的Manual發現可以有一種方法很方便的解決並得到滿意的結果
例子
希望通過標題對新聞庫進行檢索關鍵字可能包含是中英文如下SQL語句
QUOTE:
select idtitlename from achech_comnews where title like %a%
返回的結果某些title字段確定帶了a關鍵字而有些則只有中文但也隨之返回在檢索結果中
解決方法使用 BINARY 屬性進行檢索如
QUOTE:
select idtitlename from achech_comnews where binary title like %a%
返回的結果較之前正確但英文字母區分大小寫故有時在檢索如Achech及achech的結果是不一樣的知道了使用 BINARY 屬性可以解決前面這個問題再看看 MySQL 支持的UCASE 及 CONCAT 函數其中 UCASE 是將英文全部轉成大寫而CONCAT函數的作用是對字符進行連接以下是我們完全解決後的SQL 語句
QUOTE:
select idtitlename from achech_comnews
where binary ucase(title) like concat(%ucase(a)%)
檢索的步驟是先將屬性指定為 BINARY 以精確檢索結果而被 like 的 title內容存在大小寫字母的可能故先使用 ucase 函數將字段內容全部轉換成大寫字母然後再進行 like 操作而 like 的操作使用模糊方法使用 concat的好處是傳進來的可以是直接的關鍵字不需要帶%萬用符將a直接換成你的變量在任何語言下都萬事無憂了 當然你也可以這麼寫
QUOTE:
select idtitlename from achech_comnews where binary ucase(title) like ucase(%a%)
檢索的結果還算滿意吧不過速度可能會因此而慢N毫秒
From:http://tw.wingwit.com/Article/program/MySQL/201311/29449.html