ジオメトリ値の場合、MySQL では、構文的に整形式の概念とジオメトリ学的に有効な概念が区別されます。
ジオメトリは、次の (完全でない) リストのような条件を満たす場合、構文的に整形式になります:
Linestring には少なくとも 2 つの点があります
Polygon に少なくとも 1 つのリングがあります
Polygon リングが閉じています (最初と最後のポイントが同じです)
Polygon リングには少なくとも 4 つの点があります (最小 polygon は最初と最後の点が同じ三角形です)
コレクションが空でない (
GeometryCollection
を除く)
ジオメトリは、構文的に整形式で、次の (完全でない) リストのような条件を満たしている場合、ジオメトリ学的に有効です:
Polygon が自己交差していません
Polygon 内部リングは外部リングの内側にあります
Multipolygons に重なり合う Polygon がありません
ジオメトリが構文的に整形式でない場合、空間関数は失敗します。 WKT 値または WKB 値を解析する空間インポート関数では、構文的に整形式でないジオメトリを作成しようとするとエラーが発生します。 また、ジオメトリをテーブルに格納しようとする構文の整形式もチェックされます。
ジオメトリ学的に無効なジオメトリの挿入、選択および更新は許可されますが、構文的に整形式である必要があります。 計算費用のため、MySQL はジオメトリ学的な有効性を明示的にチェックしません。 空間計算では、無効なジオメトリが検出されてエラーが発生する場合がありますが、無効性を検出せずに未定義の結果が返されることもあります。 地理的に有効なジオメトリを必要とするアプリケーションでは、ST_IsValid()
関数を使用してジオメトリをチェックする必要があります。