Хранение в базе данных значений долготы / широты в SQL Server: десятичное число (2,?) - PullRequest
6 голосов
/ 11 февраля 2011

В определении таблицы я увидел:

Latitude     ->    varchar(50)
Longitude    ->    nvarchar(50)

Сразу же, очевидно, я поставил под сомнение то, что стоит за этим - будучи уверенным, что эти значения на самом деле являются числовыми по своей природе.Короче говоря: я постулировал, что они будут числовыми, на самом деле десятичными, и мы отбросим философию «мышления в строках».

Теперь, чтобы понять мои дилеммы, я просто пошел дальше и напечатал:

Latitude    ->    decimal(2, 4)

Но подождите секунду, 4 не так, верно?Правильно.Поэтому я подумал, что смогу подняться до порогового значения, прежде чем понял (за долю секунды я мог бы добавить), что 6 или 8 тоже не могут его сократить.Итак, обо всем по порядку ...

Правильно ли я настаиваю, чтобы мы даже пошли по этому пути?И если это так ...

С какой точностью должны храниться эти значения, чтобы мы могли сохранить все значение, которое должно быть вставлено?Например, есть ли что-то предопределенное спецификацией?

Я не просто хочу использовать что-то вроде Latitude -> decimal(2, 16) просто для того, чтобы оно было таким же недостатком, как и decimal(2, 2) в принципе.И аналогичный вопрос возникает конкретно для Longitude, но я предполагаю, что ответа на один будет достаточно для другого, то есть decimal(3, answer).

Мы используем MSSQL Server 2005.

Кажется, яя изучаю SQL Server вручную, и поэтому не рассматриваю некоторые части этого вопроса: я все равно могу использовать только decimal(x, max(x)), а не decimal(x, y)!Оставит вопрос как есть для ввода.

Ответы [ 2 ]

19 голосов
/ 12 февраля 2011

Десятичный знак (2, 4) означает 2 цифры точности и 4 после десятичного знака.SQL Server не позволит вам сделать это, но я думаю, что будет означает, что вы можете хранить значения от -0,0099 до 0,0099.

Я бы рекомендовал десятичную (9, 6).Это будет хранить с точностью до 1/6 дюйма на экваторе.При использовании 9 или менее, поскольку точность требует 5 байтов памяти, при использовании 10-19 требуется 9 байтов.

1 голос
/ 12 февраля 2011

Максимальная точность десятичных дробей на сервере sql в настоящее время составляет 38. Масштаб может составлять до 38. При максимальных значениях десятичная дробь будет занимать 17 битов, тогда как varchar занимает любую длину плюс 2. Поэтомувы пошли с varchar (38), на максимуме вы берете 40 бит данных.С другой стороны, varchar не так ограничен в размерах, как десятичный.Итак, что вам действительно нужно сделать, это выяснить, сколько десятичных знаков вы собираетесь разрешить, а затем определить тип данных для него.

Информация об источнике

...