Ошибка MySQL 1215: невозможно добавить ограничение внешнего ключа для типа данных геометрии POINT

0

Я latlong создать ограничение внешнего ключа с столбцом 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

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. Они либо представлены как Текст, либо Blob, и ни один из них не разрешен.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню