2017-12-12 26 views
0

列にlatlongという外部キー制約を作成しようとしていますが、指定したコードでエラーコード(1215)が表示されます。 latlongのデータ型をintに変更すると、コードが正しく機能し、この問題の原因が外部キー制約の作成時にPOINTデータ型であるという考えが得られます。 POINTが0次元のジオメトリオブジェクトである場合、デフォルト値でインスタンス化することはできないため、これは問題ではないこともわかります。MySQLエラー1215:ジオメトリデータ型の外部キー制約を追加できません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; 

としては、私は、外部キーlatlong意図したとおりのコードが実行さint(5) NOT NULL DEFAULT 0に私のPOINTのデータ型を変更する場合、上記と述べました。

+1

これまでに試したことのコードサンプルをご提供ください。そうすれば、私たちはより効果的にあなたを助けることができます。画像は切り取りと貼り付けが難しくなります – Ivonet

+0

申し訳ありませんが、コードを含むように文書を編集しました。 – chasemcintyre

答えて

0

Intruiging:外部キー列に

https://dev.mysql.com/doc/refman/5.6/en/create-table-foreign-keys.html

インデックスプレフィックスがサポートされていません。これの結果として、BLOB列とTEXT列は外部キーに含めることができません。これらの列の索引には常に接頭部の長さが含まれている必要があるからです。 (POINTに関する)

https://dev.mysql.com/doc/refman/5.6/en/gis-data-formats.html

well-knownバイナリ(WKB)形式 幾何値のwell-knownバイナリ(WKB)表現がBLOBで表されるバイナリストリームとしてジオメトリデータを交換するために使用されます値

または

Well-Known Text(WKT)形式 ジオメトリ値のWell-Known Text(WKT)表現は、ASCII形式のジオメトリデータを交換するために設計されています。

あなたがFKとして使用することができない理由があるようです。それらはTextまたはBlobとして表され、いずれも許可されません。

関連する問題