我有一个问题,我可以使用两个非常简单的表重新创建。表格定义如下:
create table Temp_Table_MyISAM(
id INT UNSIGNED AUTO_INCREMENT,
code VARCHAR(10) NOT NULL,
name VARCHAR(256) NOT NULL,
PRIMARY KEY (id),
KEY (code),
FULLTEXT (name)
) ENGINE = MYISAM;
create table Temp_Table_InnoDB(
id INT UNSIGNED AUTO_INCREMENT,
code VARCHAR(10) NOT NULL,
name VARCHAR(256) NOT NULL,
PRIMARY KEY (id),
KEY (code),
FULLTEXT (name)
);
每个表都有两行,从以下两个查询的结果可以看出:
从Temp_Table_MyISAM中选择*;
+----+---------+----------------+
| id | code | name |
+----+---------+----------------+
| 1 | AC-7865 | 38 NORTHRIDGE |
| 2 | DE-3514 | POLARIS VENTRI |
+----+---------+----------------+
从Temp_Table_InnoDB中选择*;
+----+---------+----------------+
| id | code | name |
+----+---------+----------------+
| 1 | AC-7865 | 38 NORTHRIDGE |
| 2 | DE-3514 | POLARIS VENTRI |
+----+---------+----------------+
当我在MyISAM表上进行FULLTEXT搜索时,我没有得到任何点击
MariaDB [stackoverflow]> SELECT名称,代码FROM Temp_Table_MyISAM 在哪里比赛(姓名)反对('38');
空集(0.00秒)MariaDB [stackoverflow]> SELECT名称,代码FROM Temp_Table_MyISAM 在哪里比赛(名字)反对('POLARIS');
空集(0.00秒)
当我在InnoDB表上进行FULLTEXT搜索时,只有当要匹配的模式不是以数值开头时才能获得命中
MariaDB [stackoverflow]> SELECT名称,代码FROM Temp_Table_InnoDB 在哪里比赛(姓名)反对('38');
空集(0.00秒)MariaDB [stackoverflow]> SELECT名称,代码FROM Temp_Table_InnoDB 在哪里比赛(名字)反对('POLARIS');
+----------------+---------+
| name | code |
+----------------+---------+
| POLARIS VENTRI | DE-3514 |
+----------------+---------+
任何见解都将受到赞赏。
答案 0 :(得分:2)
在MyISAM FULLTEXT
中需要注意3条规则:
短于ft_min_word_len
的文字(默认4个字符)将不会被编入索引。 (" 38&#34)
搜索显示在50%或更多行中的单词将被忽略。 ("北极星&#34)
"停止言语"在文本中没有索引。 ("","和",...)
由于InnoDB现在支持FULLTEXT
,您应该转移到该引擎。 (那里的规则不同。)