【问题标题】:Error creating spatial index on MySql BLOB column在 MySql BLOB 列上创建空间索引时出错
【发布时间】:2010-11-19 22:58:34
【问题描述】:

我正在尝试向名为 Location 的 BLOB 类型的表列添加空间索引。如果我试试这个:

ALTER TABLE route ADD SPATIAL INDEX(Location); 

我明白了:

错误:BLOB/TEXT 列“位置” 在没有使用的关键规范中 密钥长度

但是在official docs for MySql 5.1(我正在使用的版本)中,在提到空间索引时明确表示:

"在 MySQL 5.1 中,列前缀长度 被禁止。每个的全宽 列已编入索引。”

这肯定说明我不需要提供前缀。我尝试添加一个前缀,如下所示:

ALTER TABLE route ADD SPATIAL INDEX(Location(256)); 

我得到:

错误:前缀键不正确;使用过的 关键部分不是字符串,使用的 长度大于关键部分,或 存储引擎不支持 唯一的前缀键

那到底是怎么回事??对于信息,我使用 MySQL 5.1.37 社区,我的表是 MyISAM,这是创建语句:

CREATE TABLE `climb`.`route` ( 
`Id` int(11) NOT NULL, 
`Name` varchar(255) NOT NULL, 
`Location` blob, 
PRIMARY KEY (`Id`), 
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

PS 我也尝试过让 Location NOT NULL,这没什么区别。

【问题讨论】:

    标签: mysql blob myisam mysql-error-1170


    【解决方案1】:

    应该在GEOMETRY 类型上创建空间索引。

    CREATE TABLE `route` (
            `Id` int(11) NOT NULL, 
            `Name` varchar(255) NOT NULL, 
            `Location` GEOMETRY NOT NULL,
            PRIMARY KEY (`Id`),
            SPATIAL KEY (`Location`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
    

    【讨论】:

    • 正确,虽然 MySql 支持以众所周知的二进制 (WKB) 格式对几何列 (dev.mysql.com/doc/refman/5.1/en/gis-wkb-format.html) 使用 BLOB,但您似乎不能拥有空间索引。诀窍是让 Fluent NHibernate 做到这一点,我不得不用 .CustomSqlTypeIs("GEOMETRY") 强制 SQL 类型。谢谢!
    【解决方案2】:

    我认为您尝试添加空间索引的列应声明为非空。

    【讨论】:

    • 感谢您的想法,但不幸的是,这并没有什么区别 :( 我已将 Location NOT NULL 设为(已更新我的帖子以显示这一点),但当我尝试应用空间索引。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多