Мне интересно, какой тип столбца лучше всего подходит для хранения широты / долготы в MySQL + Rails.
Из официального документа Google:
http://code.google.com/apis/maps/articles/phpsqlajax_v3.html
С текущим возможности масштабирования Карты Google, вам нужно всего 6 цифры точности после десятичной дроби. Чтобы сохранить место для хранения, необходимое для ваш стол как минимум, вы можете укажите, что широта и долгота атрибуты - это числа с плавающей запятой (10,6). Это позволит полям хранить 6 цифры после запятой, плюс до 4 цифры перед десятичной дробью, например -123,456789 градусов.
Итак, на самом деле FLOAT (10,6)
рекомендуется Google.
Однако с Rails 3,похоже, нет простого способа определить тип столбца FLOAT
с точностью до десятичной точки. Например, вы можете написать миграцию с необработанным SQL следующим образом:
def self.up
execute <<-SQL
ALTER TABLE places
ADD `lat` FLOAT(10,6),
ADD `lng` FLOAT(10,6)
SQL
add_index :places, [ :lat, :lng ]
end
Но schema.rb
, как следствие, будет выглядеть так:
t.float "lat", :limit => 10
t.float "lng", :limit => 10
, в котором отсутствует точность дробной части.
Здесь я вижу несколько вариантов:
FLOAT (10,6)
для оптимальной производственной производительности и не выгружайте схему (например, rake db: test: load
) при разработке. DECIMAL (10,6)
, который поддерживается Rails, но занимает 6 байтов, что в 1,5 раза больше, чем FLOAT
(см .: http://dev.mysql.com/doc/refman/5.1/en/storage-requirements.html ). Может быть, это будет хорошим компромиссом? DOUBLE
, который намного просторнее, чем требуется Google, и занимает 8 байтов, в 2 раза больше, чем FLOAT
. Это тоже просто. Что вы порекомендуете?