首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 中文 LIKE 查詢匹配錯誤四大解決方案

     編輯:MySQL 資料庫相關知識

問題場景

$str = "李";
SELECT * FROM table WHERE field LIKE '%$str%';

結果包含非「李」字記錄。原因同中文排序錯誤:ISO-8859 預設字符集導致大小寫轉換干擾中文編碼比較。

四種解決方案

方法一:欄位定義加 BINARY

ALTER TABLE table MODIFY field VARCHAR(50) BINARY;

永久生效,所有查詢自動二進制比較。

方法二:編譯 MySQL 指定字符集

./configure --with-charset=gbk

根治但需重新編譯部署。

方法三:使用 LOCATE 函數(本站採用)

SELECT * FROM table WHERE LOCATE(field, '李') > 0;

LOCATE(substr, str) 返回子字串位置,不受大小寫敏感設定影響,效能良好。

方法四:查詢時指定 BINARY

SELECT * FROM table WHERE field LIKE BINARY '%李%';

單次查詢生效,無需修改表結構,靈活性最高。

效能與適用性對比

方法生效範圍效能維護成本
欄位 BINARY全域高低(一次修改)
編譯指定 charset全域高高(需重新部署)
LOCATE 函數單查詢中低(SQL 寫法)
LIKE BINARY單查詢高最低(關鍵字)

建議選擇

  • 新專案:建表時直接加 BINARY 或使用 utf8mb4 字符集
  • 存量系統快速修復:SQL 加 LIKE BINARY 或改用 LOCATE
  • 避免使用 COLLATE 強制轉換,效能較差且語法繁瑣
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved