Подтвердить что ты не робот

Разница между DECIMAL и NUMERIC

Какая разница между типом данных SQL NUMERIC и DECIMAL? Если базы данных относятся к ним по-другому, я хотел бы знать, как минимум:

  • SQL Server
  • Oracle
  • Db/2
  • MySQL
  • PostgreSQL

Кроме того, существуют ли различия в том, как интерпретаторы баз данных интерпретируют эти типы?

4b9b3361

Ответ 1

Они одинаковы для почти всех целей.

В свое время разные производители использовали разные имена (числовые/десятичные) для почти одного и того же. SQL-92 сделала их одинаковыми с одной незначительной разницей, которая может быть специфичной для поставщика:

NUMERIC должен быть точно таким же точным, как и определено - поэтому, если вы определяете 4 десятичных разряда, БД всегда должна хранить 4 десятичных разряда.

DECIMAL должен быть не менее точным, чем он определен. Это означает, что база данных может хранить больше цифр, чем указано (из-за закулисного хранилища, имеющего место для дополнительных цифр). Это означает, что база данных может хранить 1.00005 вместо 1.0000, влияя на будущие вычисления.

В SQL Server Numeric определяется как идентичный Decimal во всех отношениях - оба всегда будут хранить только указанное количество знаков после запятой.

Ответ 2

Они синонимы, никакой разницы вообще.

По меньшей мере на SQL Server в стандартах ANSI SQL. Этот SO ответ показывает некоторую разницу в ANSI, но я подозреваю, что в реализации они одинаковы

Ответ 3

Postgres: Без разницы

в документация описание в таблице 8.1 выглядит одинаково, но не объяснено, почему это упоминается отдельно, поэтому по словам Тома Лейна post

Нет никакой разницы, в Postgres. Существует два типа имен, поскольку стандарт SQL требует мы принимаем оба имени. В быстром просмотре в стандарте появляется что это единственное отличие:

     17)NUMERIC specifies the data type exact numeric, with the decimal
        precision and scale specified by the <precision> and <scale>.

     18)DECIMAL specifies the data type exact numeric, with the decimal
        scale specified by the <scale> and the implementation-defined
        decimal precision equal to or greater than the value of the
        specified <precision>.

т.е. для DECIMAL реализация допускает больше цифр чем запрос слева от десятичной точки. Postgres не осуществлять эту свободу, чтобы между этими типами нас.

      regards, tom lane

также на странице ниже docs ясно, что

Типы десятичные и числовые эквивалентны. Оба типа являются частью стандарт SQL.

а также в таблица псевдонимов decimal [ (p, s) ] упоминается как псевдоним для numeric [ (p, s) ]