创建SPATIAL INDEX空间索引时执行报错,求错误原因排查建议
空间索引创建报错排查方案
常见诱因及修复方式:
- 语法错误:指定了不支持的排序参数
MySQL空间索引不支持自定义排序方向,你写的语句中在location字段后加的ASC修饰不符合语法要求,这是最常见的报错原因。同时建议索引名不要和字段名重名,避免后续操作歧义,修正后的语句如下:CREATE SPATIAL INDEX `idx_points_location` ON `Points` (`location`); - 存储引擎/版本不兼容
- MySQL 5.6及更早版本仅MyISAM引擎支持空间索引,如果你使用的是该版本,需要在建表语句末尾补充
ENGINE=MyISAM指定引擎,或者升级到5.7及以上版本。 - MySQL 8.0及以上版本的InnoDB引擎要求空间字段必须指定明确的SRID约束才能创建空间索引,你需要调整建表语句给
location字段补充SRID属性,示例如下:create table Points ( Name varchar (20) not null, location Point not null SRID 4326, -- 常用WGS84坐标系对应SRID为4326,可按需调整 description varchar (200), Primary key (Name) ) ENGINE=InnoDB;
- MySQL 5.6及更早版本仅MyISAM引擎支持空间索引,如果你使用的是该版本,需要在建表语句末尾补充
- 存量数据非法
如果创建索引前你已经往表中插入过不符合Point格式规范的脏数据,也会导致索引创建失败,可先清空表中数据后再尝试执行建索引语句。
内容的提问来源于stack exchange,提问作者Kyle
相关产品推荐
相关产品推荐

