在開發中,有時需要存儲地理位置信息,如經緯度。而MySQL是一款常用的關系型數據庫,那么如何在MySQL中存儲經緯度信息呢?
通常有兩種方法:使用Decimal類型和使用Point類型。
-- Decimal類型示例 CREATE TABLE `location`( `id` INT AUTO_INCREMENT PRIMARY KEY, `longitude` DECIMAL(10, 8) NOT NULL COMMENT '經度', `latitude` DECIMAL(10, 8) NOT NULL COMMENT '緯度' );
-- Point類型示例 CREATE TABLE `location`( `id` INT AUTO_INCREMENT PRIMARY KEY, `position` POINT NOT NULL COMMENT '經緯度' );
使用Decimal類型存儲經緯度時,需要指定精度,表示小數點后的位數。例如DECIMAL(10, 8)表示總共10位,小數點后8位。使用Point類型存儲經緯度時,只需要一個字段,使用ST_GeomFromText()函數將經緯度轉化為Point類型即可。
-- 插入數據 INSERT INTO location(longitude, latitude) VALUES(116.397128, 39.916527); INSERT INTO location(position) VALUES(ST_GeomFromText('POINT(116.397128 39.916527)'));
使用Point類型存儲經緯度可以使用MySQL的空間索引,實現簡單的空間查詢。例如查詢距離指定經緯度不超過1000米的所有位置:
SELECT id, ST_X(position), ST_Y(position), ST_Distance_Sphere(position, POINT(116.397128, 39.916527)) FROM location WHERE ST_Distance_Sphere(position, POINT(116.397128, 39.916527))<= 1000;
總之,使用Decimal類型或Point類型都可以存儲地理位置信息。Decimal類型相對簡單,但無法使用空間索引;Point類型功能更強大,可以使用MySQL的空間索引實現空間查詢。