2009-12-03 31 views
40

¿Cuál es la diferencia entre el tipo de datos SQL NUMERIC y DECIMAL? Si las bases de datos tratar a estos de manera diferente, me gustaría saber cómo por lo menos:Diferencia entre DECIMAL y NUMERIC

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

Además, ¿hay alguna diferencia en la forma en que los controladores de bases de datos interpretan estos tipos?

+1

Para Oracle la misma debido a que ambos se convierten en 'NUMBER' http://download.oracle.com/docs/cd/E11882_01/server. 112/e17118/sql_elements001.htm # i54335 –

Respuesta

6

Son sinónimos, no hay diferencia en absoluto.

Al menos en SQL Server en los estándares ANSI SQL. Este SO answer shows alguna diferencia en ANSI pero sospecho que en la implementación son los mismos

+1

Lo mismo para Oracle: http://techonthenet.com/oracle/datatypes.php –

30

Son los mismos para casi todos los propósitos.

Hubo un tiempo en que diferentes proveedores usaban nombres diferentes (Numérico/Decimal) para casi lo mismo. SQL-92 los hizo iguales con una diferencia menor que puede ser específica del proveedor:

NUMERIC debe ser exactamente tan preciso como se define, por lo que si define 4 posiciones decimales, la base de datos siempre debe almacenar 4 decimales.

DECIMAL debe ser al menos tan preciso como se define. Esto significa que la base de datos puede almacenar más dígitos que los especificados (debido a que el espacio de almacenamiento detrás de escena tiene espacio para dígitos adicionales). Esto significa que la base de datos puede almacenar 1.00005 en lugar de 1.0000, afectando los cálculos futuros.

En SQL Server Numeric se define como idéntico a Decimal en todos los sentidos: ambos siempre almacenarán solo el número especificado de lugares decimales.

+2

es lo decimal/numérico, no al revés? http://stackoverflow.com/questions/759401/is-there-any-difference-between-decimal-and-numeric-in-ms-sql/759606#759606 – gbn

+2

Sí, eso es correcto. – David

+0

Editado para * ser * "al revés", para mayor claridad; Creo que los tachados de David fueron más confusos que útiles. – Quuxplusone

3

Postgres:no Diferencia

en documentation descripción de la Tabla 8.1 se ve igual, sin embargo, no se explica por qué se menciona por separado, por lo según Tom Lane, post

Hay no hay ninguna diferencia, en Postgres. Hay dos nombres de tipos porque el estándar SQL requiere nosotros para aceptar ambos nombres. En un vistazo rápido en la norma parece que la única diferencia es la siguiente:

 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>. 

es decir, para decimal se permite la aplicación para permitir que más dígitos que el solicitado a la izquierda de la coma decimal. Postgres no aplica esa libertad así que no hay diferencia entre estos tipos para nosotros.

 regards, tom lane 

también una página inferior estado claramente, que

Los tipos numérico decimal y son equivalentes. Ambos tipos son parte del estándar SQL .

y también en aliases tabledecimal [ (p, s) ] se menciona como alias para numeric [ (p, s) ]