Я 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
код работает по назначению.
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, и ни один из них не разрешен.