【发布时间】:2014-05-23 02:35:34
【问题描述】:
我创建了一个名为users的表,如下:
CREATE TABLE users (
u_id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
u_namefirst VARCHAR(100),
u_namelast VARCHAR(100),
u_email VARCHAR(100),
FULLTEXT (u_namefirst, u_namelast, u_email)
) ENGINE=MyISAM;
并用数据填充它:
INSERT INTO users (u_namefirst, u_namelast, u_email) VALUES
('Michael','Williams','williams@williams.com'),
('Jon','Test','test@test.com'),
('Jane','Smith','smith@smith.com'),
('Fred','Francis','fred@fred.com'),
('Mike','Williams','mike@williams.com'),
('Michael','Burke','michael@burke.com');
然而,当我跑步时:
SELECT *
FROM users
WHERE MATCH ( u_namelast ) AGAINST ( 'williams');
我得到:“错误代码:1191。找不到与列列表匹配的 FULLTEXT 索引”。索引肯定存在,它的类型肯定是全文。已为该索引选择了正确的列。
我尝试同时运行 InnoDB 和 MyISAM 引擎,得到了相同的结果。作为测试,当我将最后一行换成WHERE u_namefirst = 'michael' 时,我得到了正确的结果——所以我不认为这是现有数据的问题。
我在 Windows 7 Ultimate 上运行 MySQL 5.6.16 (x86_64)。
任何帮助表示赞赏!
【问题讨论】:
-
请显示
create table语句和用于创建索引的任何其他语句。显而易见的假设是该索引并不真正存在。 -
该表最初是从 Access 文件中导入的。该索引是使用 MySQL Workbench 创建的,代码如下:
ALTER TABLE 'system'.'user' ADD FULLTEXT INDEX 'search' ('firstname' ASC); -
我的猜测是,基于单引号的使用,该索引从未创建过。仅对字符串和日期常量使用单引号。
-
在 MySQL 中使用反引号引用表名和列名。
-
我删除了索引并重新创建了它,如下所示:
ALTER TABLE user ADD FULLTEXT INDEX search ( firstname ASC );(没有单引号,如建议的那样)。这成功创建了索引,但是当我匹配时仍然出现 1191 错误消息。它是从 Access 导入的这一事实是否会导致任何问题?
标签: mysql sql indexing full-text-search