Následující ukázka bohužel vrátí jiný výsledek v MySQL5.7+ a MariaDB10+:
SET @area = ST_GEOMFROMTEXT('POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))');
SET @point = ST_GEOMFROMTEXT('POINT(0 9)');
SELECT ST_Contains(@area,@point);
V MySQL bude výsledek ten, že polygon @area obsahuje @point (ležící na hranici oblasti), zatímco z MariaDB se dozvíme, že neobsahuje. Vysvětlení k tomuto rozdílu chování jsem nikde nenašel a ani MariaDB dokumentace k ST_Contains to nijak zvlášť nevysvětluje:
Returns
1or0to indicate whether a geometryg1completely contains geometryg2.
Pokud tedy chceme v MariaDB testovat nebo hledat i hraniční body, musíme doplnit test i o ST_Touches:
SET @area = ST_GEOMFROMTEXT('POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))');
SET @point = ST_GEOMFROMTEXT('POINT(0 9)');
SELECT ST_Contains(@area,@point) || ST_Touches(@area, @point);
Pro úplnost uvedu, že uvedené chování platí pro body. Pokud testujeme polygony, tak u těch je stejná hranice výsledek neovlivní, viz ukázka:
SET @area = ST_GEOMFROMTEXT('POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))');
SET @subarea = ST_GEOMFROMTEXT('POLYGON((0 0, 5 0, 5 5, 0 5, 0 0))');
SELECT ST_Contains(@area,@subarea);
V tomto případě nám i MariaDB vrátí výsledek, že podoblast @subarea zcela leží v oblasti @area.