我正在尝试使用列latlong
创建外键约束,如图所示,但我收到了带有给定代码的错误代码(1215)。
如果我将latlong
的数据类型更改为int,则代码正常运行,让我知道此问题的原因是创建外键约束时的POINT数据类型。
鉴于POINT是零维几何对象,它无法使用默认值进行实例化,因此我知道这也不是问题。
必须有一些我不知道的POINT数据类型的特殊属性,但是在线的可用资源并没有帮助我解决这个问题。
目前的代码是:
CREATE TABLE IF NOT EXISTS `notablesurroundingareas` (
`nsa_id` int(5) NOT NULL DEFAULT 0,
`latlong` POINT NOT NULL,
`nsa_location_type` varchar(20) DEFAULT '',
`nsa_location_name` varchar(30) DEFAULT '',
PRIMARY KEY (`nsa_id`),
KEY (`latlong`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE IF NOT EXISTS `locationinformation` (
`latlong` POINT NOT NULL,
`li_city` varchar(30) DEFAULT '',
`li_zip_code` int(5) DEFAULT 0,
`li_area_code` int(3) DEFAULT 0,
FOREIGN KEY (`latlong`)
REFERENCES notablesurroundingareas(`latlong`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
如上所述,当我将POINT外键latlong
的数据类型更改为int(5) NOT NULL DEFAULT 0
时,代码按预期运行。
答案 0 :(得分:0)
Intruiging:
https://dev.mysql.com/doc/refman/5.6/en/create-table-foreign-keys.html
不支持外键列上的索引前缀。这样做的一个结果是BLOB和TEXT列不能包含在外键中,因为这些列上的索引必须始终包含前缀长度。
https://dev.mysql.com/doc/refman/5.6/en/gis-data-formats.html(关于POINT
)
熟知的二进制(WKB)格式 几何值的已知二进制(WKB)表示用于将几何数据交换为由BLOB值表示的二进制流
或
熟知文本(WKT)格式 几何值的已知文本(WKT)表示用于以ASCII格式交换几何数据。
似乎这就是你不能用它作为FK的原因。它们表示为Text或Blob,两者都不允许。