在MySQL中使用MyISAM
存储引擎,我想强制表中POLYGON
列的唯一性。基本上,如果我尝试插入副本,我希望它导致错误,或者只是被忽略。使用传统的列类型,可以使用UNIQUE
关键字来完成,但如果使用空间列,则会导致以下错误:
ERROR 1170 (42000): BLOB/TEXT column 'bounding_box' used in key specification without a key length
来自此表定义:
CREATE TABLE IF NOT EXISTS quadrants (
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
bounding_box POLYGON NOT NULL UNIQUE,
centroid POINT NOT NULL UNIQUE,
SPATIAL KEY bb_idx(bounding_box),
SPATIAL KEY centroid_idx(centroid)
) ENGINE=MyISAM;
是否可以在MySQL中强制实施空间数据类型的唯一性?
编辑: 有人建议这是MySQL error: key specification without a key length的副本,但我相信它是不同的。该问题及其答案未提及空间数据类型。我只是推断POLYGON
实际上存储为BLOB
,因此受到类似的约束。但我仍然不知道是否有其他方法来强制POLYGON
的唯一性 - 或者是否存在实际的解决方法,如果不是这样的话。
另一个问题解决了同样的错误,但在不同的上下文中,我觉得一个单独的问题是有用的。
答案 0 :(得分:0)
由于空间列像 blob 列一样存储,您应该创建两个索引:一个长度用于精确查询/唯一性的非空间索引,以及一个用于范围查询的空间索引。此外,如果您的多边形不重叠,那么非常小的长度就足够了。