In Anbetracht der Tatsache, dass ich Berechnungen auf Lat/Long-Paaren durchführen werde, welcher Datentyp ist am besten für die Verwendung mit einer MySQL-Datenbank geeignet?
Antworten
Zu viele Anzeigen?Das hängt von der Genauigkeit ab, die Sie benötigen.
Datatype Bytes resolution
------------------ ----- --------------------------------
Deg*100 (SMALLINT) 4 1570 m 1.0 mi Cities
DECIMAL(4,2)/(5,2) 5 1570 m 1.0 mi Cities
SMALLINT scaled 4 682 m 0.4 mi Cities
Deg*10000 (MEDIUMINT) 6 16 m 52 ft Houses/Businesses
DECIMAL(6,4)/(7,4) 7 16 m 52 ft Houses/Businesses
MEDIUMINT scaled 6 2.7 m 8.8 ft
FLOAT 8 1.7 m 5.6 ft
DECIMAL(8,6)/(9,6) 9 16cm 1/2 ft Friends in a mall
Deg*10000000 (INT) 8 16mm 5/8 in Marbles
DOUBLE 16 3.5nm ... Fleas on a dog
Von: http://mysql.rjweb.org/doc.php/latlng
Zusammengefasst:
- Die präziseste verfügbare Option ist
DOUBLE
. - Der am häufigsten verwendete Typ ist
DECIMAL(8,6)/(9,6)
.
Ab dem MySQL 5.7 zu verwenden. Räumliche Datentypen (SDT), insbesondere POINT
für die Speicherung einer einzelnen Koordinate. Vor 5.7 unterstützt SDT keine Indizes (mit Ausnahme von 5.6, wenn der Tabellentyp MyISAM ist).
Anmerkung:
- Bei der Verwendung von
POINT
Klasse muss die Reihenfolge der Argumente für die Speicherung von Koordinaten seinPOINT(latitude, longitude)
. - Es gibt eine spezielle Syntax für Erstellung eines räumlichen Indexes .
- Der größte Vorteil von SDT ist, dass Sie Zugang zu folgenden Informationen haben Funktionen für räumliche Analysen z. B. Berechnung der Entfernung zwischen zwei Punkten (
ST_Distance
) und die Bestimmung, ob ein Punkt in einem anderen Bereich enthalten ist (ST_Contains
).
Basierend auf diesem Wiki-Artikel http://en.wikipedia.org/wiki/Decimal_degrees#Accuracy der geeignete Datentyp in MySQL ist Decimal(9,6) für die Speicherung von Längen- und Breitengrad in separaten Feldern.
Wir speichern Breitengrad/Längengrad X 1.000.000 in unserer Oracle-Datenbank als ZIFFERN, um Rundungsfehler bei Doppelwerten zu vermeiden.
In Anbetracht der Tatsache, dass Breitengrad/Längengrad bis zur 6. Dezimalstelle 10 cm genau waren, war das alles, was wir brauchten. Viele andere Datenbanken speichern Breiten- und Längengrade ebenfalls mit der 6.