2009-12-03 6 views
40

Quelle est la différence entre le type de données SQL NUMERIC et DECIMAL? Si les bases de données traitent ces différentes, je voudrais savoir comment au moins:Différence entre DECIMAL et NUMERIC

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

En outre, y a-t-il des différences dans la manière dont les pilotes de bases de données interprètent ces types?

+1

Pour Oracle même parce que les deux sont convertis en 'number' http://download.oracle.com/docs/cd/E11882_01/server. 112/e17118/sql_elements001.htm # i54335 –

Répondre

6

Ce sont des synonymes, pas de différence du tout.

Au moins sur SQL Server dans les normes SQL ANSI. Cette différence SO answer shows en ANSI mais je soupçonne dans la mise en œuvre, ils sont les mêmes

+1

Idem pour Oracle: http://techonthenet.com/oracle/datatypes.php –

30

Ils sont les mêmes pour presque toutes les fins.

À un moment donné, différents fournisseurs utilisaient des noms différents (numériques/décimaux) pour pratiquement la même chose. SQL-92 les a fait la même chose avec une différence mineure qui peut être spécifique au vendeur:

NUMERIC doit être exactement aussi précis que défini - donc si vous définissez 4 décimales, le DB doit toujours stocker 4 décimales.

DECIMAL doit être au moins aussi précis que cela est défini. Cela signifie que la base de données peut réellement stocker plus de chiffres que spécifié (en raison de l'espace de stockage en coulisse permettant d'avoir des chiffres supplémentaires). Cela signifie que la base de données peut stocker 1.00005 au lieu de 1.0000, affectant les calculs futurs.

Dans SQL Server, Numeric est défini comme étant identique à Decimal dans tous les cas - les deux stockent toujours uniquement le nombre de décimales spécifié.

+2

est la chose décimale/numérique, pas l'inverse? http://stackoverflow.com/questions/759401/is-there-any-difference-between-decimal-and-numeric-in-ms-sql/759606#759606 – gbn

+2

Oui, c'est correct. – David

+0

Édité à * be * "l'inverse", pour plus de clarté; Je pense que les barrés de David étaient plus déroutants qu'utiles. – Quuxplusone

3

Postgres:Pas de différence

dans documentation Description dans le tableau 8.1 semble même, mais il est pas expliqué pourquoi il est mentionné séparément, de sorte selon Tom Lane post

Il est pas n'importe quelle différence, dans Postgres. Il existe deux noms de type car la norme SQL requiert us pour accepter les deux noms. Dans un rapide coup d'oeil dans la norme, il semble que la seule différence est la suivante:

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

-à-dire, pour la mise en œuvre DECIMAL est autorisé à permettre à plus de chiffres que demandé à la gauche de la virgule. Postgres n'exerce pas cette liberté donc il n'y a pas de différence entre ces types pour us.

 regards, tom lane 

également une page inférieure indiquer clairement que

Les types décimal et numérique sont équivalents. Les deux types font partie de la norme SQL.

et aussi à aliases tabledecimal [ (p, s) ] est mentionné comme alias pour numeric [ (p, s) ]