Chciałbym przechowywać pewne geometryczne pozycje w mojej bazie danych MySQL. W tym celu używam typu danych POINT. Niemal wszędzie czytam, że GeomFromText
należy użyć tej funkcji do wstawienia danych do tabeli.
Jednak dowiedziałem się, że to POINT(X,Y)
również działa. Nie znalazłem żadnego opisu, dlaczego GeomFromText
należy go użyć zamiast POINT
.
Na przykład mam następującą prostą relację:
CREATE TABLE Site (
SiteID BIGINT UNSIGNED,
Position POINT
);
I mogę wstawić wartości, używając następujących dwóch wariantów:
INSERT INTO Site (
1,
GeomFromText( 'POINT(48.19976 16.45572)' )
);
INSERT INTO Site (
2,
POINT(48.19976, 16.45572)
);
Kiedy przeglądam tabelę ( SELECT * FROM Site
), widzę ten sam binarny obiekt blob dla lokalizacji, a kiedy przeglądam współrzędne ( SELECT *, AsText(Position) FROM Site
), widzę te same wartości.
Dlaczego więc należy używać GeomFromText? Czy istnieją (znane) różnice w wydajności między tymi dwoma wariantami? Jak to rozwiązać w innych systemach baz danych niż MySQL?
INSERT INTO Site (Position) SELECT POINT(latitude, longitude) FROM tmp
jest prostsze niż...SELECT GeomFromText(CONCAT('POINT(',latitude,' ',longitude,')' )) ...