MATCH AGAINST 一个字符返回空行,ft_min_word_len = 1

Jak*_*sky 3 mysql my.cnf pattern-matching environment-variables

我已经设置ft_min_word_len = 1my.cnf文件,也SHOW VARIABLES LIKE 'ft_min_word%'显示ft_min_word_len as 1. 然后我重新加载了所有数据库表,它仍然没有搜索一个字符的单词。

我的表:

CREATE TABLE IF NOT EXISTS event (
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(80) NOT NULL,
description TEXT,
time TIMESTAMP DEFAULT 0,
FULLTEXT(name)
);
Run Code Online (Sandbox Code Playgroud)

我的查询:

SELECT event.id AS eid,
    event.name AS ename
FROM event
WHERE MATCH(event.name) AGAINST('+W*' IN BOOLEAN MODE)
Run Code Online (Sandbox Code Playgroud)

我正在寻找的事件名称是 W.W.W. + Pavel Fajt + Vladimir 518 @ Sono

请问还有什么可能导致问题?

编辑:我正在使用 InnoDB,抱歉我之前没有提到过。

jyn*_*nus 7

mysql> SHOW GLOBAL VARIABLES like 'ft_min_word_len';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| ft_min_word_len | 1     |
+-----------------+-------+
1 row in set (0.00 sec)

mysql> SELECT event.id AS eid,     
              event.name AS ename 
       FROM event 
       WHERE MATCH(event.name) AGAINST('+W*' IN BOOLEAN MODE);
+-----+--------+
| eid | ename  |
+-----+--------+
|   1 | W.W.W. |
|   7 | W      |
|  12 | Wa     |
|  11 | Wat    |
|  10 | Wats   |
|   9 | Watso  |
|   8 | Watson |
+-----+--------+
7 rows in set (0.01 sec)
Run Code Online (Sandbox Code Playgroud)

也许您正在使用 InnoDB:

mysql> ALTER TABLE event ENGINE=InnoDB;
Query OK, 12 rows affected (0.51 sec)
Records: 12  Duplicates: 0  Warnings: 0

mysql> SELECT event.id AS eid,
       event.name AS ename 
       FROM event 
       WHERE MATCH(event.name) AGAINST('+W*' IN BOOLEAN MODE);
+-----+--------+
| eid | ename  |
+-----+--------+
|   8 | Watson |
|   9 | Watso  |
|  10 | Wats   |
|  11 | Wat    |
+-----+--------+
4 rows in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)

更改选项的位置innodb_ft_min_token_sizeft_min_word_len仅适用于 MyISAM)。