首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

MySQL 中文 LIKE 查詢失效?四大解決方案徹底解決亂碼與匹配錯誤

     編輯:PHP 相關知識

MySQL 預設字元集為 latin1(ISO-8859-1),導致中文 LIKE '%關鍵字%' 查詢出現誤匹配或亂碼。本文提供四種解決方案,依環境選擇適合者。

問題根源

MySQL 在比較字串時預設大小寫不敏感,且以單位元組字元集處理,多位元組中文字元(GBK/UTF-8)被拆解為單位元組比較,導致「李」字可能匹配到不相關記錄。

方案一:欄位加 BINARY 屬性(推薦既有資料庫)

ALTER TABLE `table_name` MODIFY `field_name` VARCHAR(255) BINARY;

或建表時指定:name CHAR(10) BINARY。強制二進位比較,精確匹配位元組序列。

方案二:編譯 MySQL 時指定字元集(原始碼安裝)

./configure --with-charset=gbk --with-extra-charsets=all

從根本解決排序與比較問題,但需重新編譯安裝,適合全新部署。

方案三:使用 LOCATE() 函式(不修改結構)

SELECT * FROM `table` WHERE LOCATE(`field`, '關鍵字') > 0;

LOCATE(substr, str) 回傳子字串在字串中首次出現位置(1-based),未找到回傳 0。本站採用此法,相容性佳。

方案四:查詢時加 BINARY 關鍵字

SELECT * FROM `table` WHERE `field` LIKE BINARY '%關鍵字%';

單次查詢強制二進位比較,不影響欄位定義。

最佳實踐建議

  • 新專案全端採用 UTF-8(資料庫、表、欄位、連線、HTML、PHP 檔案編碼),從根源避免編碼問題。
  • 連線建立後立即執行:SET NAMES utf8mb4(支援 Emoji)。
  • 既有 GBK 專案可用方案一或三快速修復。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved