怎樣正確的解決MySQL中文模糊檢索問題

2021-05-01 19:38:16 字數 1030 閱讀 4262

在 mysql 下,在進行中文模糊檢索時,經常會返回一些與之不相關的記錄,如查詢 「%a%」 時,返回的可能有中文字元,卻沒有 a 字元存在。本人以前也曾遇到過類似問題,經詳細閱讀 mysql 的 manual ,發現可以有一種方法很方便的解決並得到滿意的結果。

例子:·希望通過「標題」對新聞庫進行檢索,關鍵字可能包含是中英文,如 下 sql 語句:

select id,title,name from achech_com.news where title like 『%a%』

返回的結果,某些 title 字段確定帶了「a」關鍵字,而有些則只有中文,但也隨之返回在檢索結果中。

解決方法,使用 binary 屬性進行檢索,如:

select id,title,name from achech_com.news where binary title like 『%a%』

返回的結果較之前正確,但英文本母區分大小寫,故有時在檢索如「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(』%a%』)

怎樣解決PHP中文亂碼問題

最近在csdn剛開了這個部落格,沒什麼時間把以前寫的文章搬過來,只能有空慢慢來了。這篇文章僅獻給那些一直在php亂碼問題上困惑的人。a.首先說下html中文亂碼問題的解決方法。比如有個index.html的頁面 這裡是指真正的靜態頁面,修改伺服器的 偽靜態的請看方案b 1.在head標籤裡面加入這句...

怎樣正確建立MySQL索引的方法詳解

索引類似大學圖書館建書目索引,可以提高資料檢索的效率,降低資料庫的io成本。mysql在300萬條記錄左右效能開始逐漸下降,雖然官方文件說500 800w記錄,所以大資料量建立索引是非常有必要的。mysql提供了explain,用於顯示sql執行的詳細資訊,可以進行索引的優化。什麼是索引?mysql...

mysql 中文亂碼的解決

mysql基礎配置之mysql的預設字元編碼的設定 my.ini設定字元編碼 mysql的預設編碼是latin1,不支援中文,那麼如何修改mysql的預設編碼呢,下面以設定utf 8為例來說明.mysql的預設編碼是latin1,不支援中文,那麼如何修改mysql的預設編碼呢,下面以utf 8為例來...