mySQL5.7系(mariaDB10.7系)でSRID4326はエラーになる

製作 プログラム

最終更新日:2022/03/20

ラムネグから一言:寝る前に読むとくだらなすぎて逆に寝れると好評なすごい適当なブログをこっちではじめてます.

GPS座標とかを格納できる「geometry(とかgeography)」というデータ型があって、これを使うとデータベースでGPS座標を扱うことができます。

んでSRIDっていうその座標が平面なのか球面なのか(?たぶんそういうやつ)を設定する値があって、もちろん地球は球体なのでその球体に応じたSRID「4326」を設定する方が誤差なくデータベースでGPS座標を扱える、と。

んでネット検索で出てきたとおりにカラムを追加しようとすると、めっちゃエラーが出る。ちなみにこんな感じのSQL文を実行しようとしてました。

  • ALTER TABLE table_name ADD location GEOMETRY SRID 4326

んでいろいろやってみるとそもそもこのカラム設定自体にSRIDを設定するのはmySQL8.0系からしかできないみたいです(このSQL文を試せるサイト(https://www.db-fiddle.com/)でmySQLのバージョンを変えて試してみました)。

ほう。

開発環境のmySQLのバージョンは上げられるけれど、結局わたしのレンタルしてるレンタルサーバーが8.0系じゃないのでんじゃ設定できないのかー。すごい時間使ってなにも進まなかった…。できないことが分かっただけという。けっこうエグい。

おまけ:mariaDB

というかわたしは開発環境はXAMPPについてきたそのままのデータベースであるmariaDBでやってて、そもそもmySQLを開発段階では使ってないんですよね。

なんかmySQLを入れるのが面倒そうというか、そういう面倒がイヤだからXAMPPでラクチンに開発環境整えてたわけで。なんかあんまりよくない感じがしますが、まー遊びでやってるだけなんで全然おーけーおーけー!でこれまでやってたんです。

てことで最初mariaDBではSRID設定できなくて、mySQLなら設定できるってことかなーと思ってたんです。

とりあえずmariaDBについては今私が使っているのがmariaDB10.7.3で、つい数日前に最新バージョンに入れなおしたばかり(2022/3/20時点)。

てことでmySQLの方は8.0系でSRIDをカラム自体に設定できるようになってるけど、mariaDBの方はけっこう最新バージョンでもまだSRIDの設定は対応してないみたいです。

ちなみに

さっきからカラム自体にSRIDを設定!って言ってるのは、SRIDはその一行一行のレコードのgeometry型ごとに設定することができるんですよね。

  • name:東京,id:1,gps:(135.1242,134,33435,4326)

みたいな感じで(4326の所がSRIDです)。

こっちの各レコードごとのSRIDはmySQL5.7系でも保存できます。

…んじゃなんでカラム自体にSRID設定しようとしたの?って話なんですが、なんか読んだ話だとカラム自体にSRIDを設定してないとspatialのindex(GPSを用いた検索、例えば現在地から近い施設を検索とかの高速化)が効かないらしく…。

んじゃ高速で検索できないってことになるんで、うーん、という。

インデックスが効かないのはmySQL8系以降の話、なのかもしれませんが、なんか情報が少なくってよくわからないんですよね。そもそもmySQLのInnoDBがspatialインデックスに対応したのが5.7系かららしいし…。なんにしてもめちゃくちゃ調べた割にはよくわかない。

まとめ

今回はGPS座標をデータベースで扱うときに使うgeometryで、カラム自体にSRIDを設定できるのかどうかについて紹介しました。

まとめるとmySQLでは8.0系から設定できるみたい。んでmariaDBだと最新のバージョンであるmariaDB10.7.3でも設定ができないみたい、という感じでした。

【おしらせ、というか完全なる宣伝】

文体がもうぜんぜん適当すぎてあれだけどものすごい自由に書いてるブログ「檸檬だくだく」もよろしく.寝る前に読める恐ろしくくだらないやつです.

こんなにも一ミリも目を引かれないタイトルを取り扱ってます: ララピー / 我が愛しのラムネ / 昼間っから /