MySQL 8.0.11中空间/全文/哈希索引误用及显式索引顺序问题咨询
解决MySQL 8.0.11与Workbench 6.3.10正向工程的索引兼容问题
针对你遇到的sakila.film_text表在正向工程时的索引错误,我来帮你拆解问题并给出解决方案:
核心问题分析
从你提供的创建语句来看,主要问题出在全文索引的显式排序指定上:
MySQL 8.0.11开始对全文索引、空间索引这类特殊索引的语法做了严格限制,不再允许在索引字段后指定ASC/DESC排序方向——因为这类索引的内部存储结构不需要排序顺序,旧版本的Workbench(6.3.10)生成的语法已经不符合新版本MySQL的规范,这就是报错的根源。
具体解决方案
1. 手动修正SQL脚本
直接修改正向工程生成的film_text表创建语句,移除全文索引中的ASC关键字即可:
-- ----------------------------------------------------- -- Table `sakila`.`film_text` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `sakila`.`film_text` ( `film_id` SMALLINT UNSIGNED NOT NULL, `title` VARCHAR(255) NOT NULL, `description` TEXT NULL, PRIMARY KEY (`film_id`), -- 移除了字段后的ASC指定 FULLTEXT INDEX `idx_title_description` (`title`, `description`) ) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4;
执行修正后的脚本就能成功创建表和全文索引。
2. 从根源避免问题(推荐)
由于MySQL Workbench 6.3.10是比较老旧的版本,对MySQL 8.0的语法兼容性不足,建议:
- 升级MySQL Workbench到8.0及以上版本,新版本会自动适配MySQL 8.0的索引语法规范,生成不带排序方向的全文/空间索引语句
- 如果暂时无法升级,在Workbench的表设计界面中,找到
idx_title_description这个全文索引,删除字段后的排序顺序设置(默认应该是空白,不要手动选ASC/DESC),再重新执行正向工程
额外说明(关于空间/哈希索引错误)
如果还遇到其他空间或哈希索引的报错,补充两个关键点:
- 哈希索引:InnoDB引擎不支持手动创建显式哈希索引,只有自动启用的自适应哈希索引(无需手动配置),如果Workbench生成了
USING HASH的索引语句,改成USING BTREE即可 - 空间索引:InnoDB表的空间索引要求字段必须是空间类型(如
GEOMETRY),且索引需用SPATIAL关键字声明,确保语法符合MySQL 8.0的要求
内容的提问来源于stack exchange,提问作者井上智文
相关产品推荐
相关产品推荐

