MySQL错误1215:无法为几何数据类型POINT添加外键约束

时间:2017-12-12 22:15:20

标签: mysql

我正在尝试使用列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时,代码按预期运行。

1 个答案:

答案 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,两者都不允许。