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

MySQL 全文索引最小字元長度限制突破:修改 ft_min_word_len 參數支援中文單字搜尋

     編輯:MySQL 資料庫相關知識

MySQL 4.0+ 支援全文索引,但預設 ft_min_word_len = 4,導致中文單字 (通常 1-2 字) 無法被索引。本文說明修改參數、重建索引的完整步驟,讓中文全文搜尋生效。

問題現象

  • 建立全文索引:ALTER TABLE articles ADD FULLTEXT(content);
  • 搜尋「資料庫」 (2 字) → 0 筆結果。
  • 搜尋「資料庫系統」 (4 字) → 有結果。
  • 原因:預設最小索引字元長度為 4,中文單字被忽略。

解決步驟

  1. 修改設定檔 (my.cnf Linux / my.ini Windows):
    [mysqld]
    ft_min_word_len = 2  # 設為 1~3 均可,建議 2 (支援雙字詞)
  2. 重啟 MySQL 服務:
    systemctl restart mysqld  # Linux
    net stop mysql & net start mysql  # Windows
  3. 重建全文索引 (參數生效後必須重建):
    ALTER TABLE articles DROP INDEX content;  -- 刪除舊索引
    ALTER TABLE articles ADD FULLTEXT(content);  -- 重建
    或使用 REPAIR TABLE articles QUICK; (僅 MyISAM)。
  4. 驗證生效:
    SHOW VARIABLES LIKE 'ft_min_word_len';  -- 應顯示 2
    SELECT * FROM articles WHERE MATCH(content) AGAINST('資料庫');  -- 應有結果

參數影響範圍與權衡

ft_min_word_len索引大小搜尋精度適用語言
1最大 (含單字)最低 (雜訊多)中文/日文/韓文
2大良好 (雙字詞為主)**中文推薦**
3中佳混合語系
4 (預設)較小英文佳、中文失效英文為主

進階:ngram 全文解析器 (MySQL 5.7.6+ / MariaDB 10.0.5+)

無需修改 ft_min_word_len,直接指定解析器即可支援中文單字:

CREATE TABLE articles (
  id INT PRIMARY KEY,
  content TEXT,
  FULLTEXT(content) WITH PARSER ngram
) ENGINE=InnoDB;
  • ngram 將文字切分為 N-gram (預設 bigram, 2 字元),原生支援中/日/韓。
  • InnoDB / MyISAM 皆支援。
  • 搜尋語法相同:MATCH(content) AGAINST('資料庫')。
建議: MySQL 5.7+ 新專案**優先使用 ngram 解析器**,避免全域參數修改影響其他資料庫/應用;舊版 MySQL 5.6/5.5 則採用 ft_min_word_len = 2 方案。

注意事項

  • 修改 ft_min_word_len 為**全域參數**,影響該實例**所有**全文索引,需評估現有應用相容性。
  • 重建索引會鎖表 (MyISAM) 或建立新索引再切換 (InnoDB 線上 DDL),大表請安排維護窗口。
  • 中文分詞準確度仍受限於 ngram/bigrams 機制,專業搜尋建議整合 Elasticsearch + IK 分詞器。

突破 4 字元限制,讓 MySQL 全文索引真正支援中文搜尋,是提升應用搜尋體驗的關鍵一步。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved