2009-12-15 4 views
5

Quelle est la raison pour laquelle certaines personnes de l'arrière-plan Oracle utilisent DECIMAL (31,0) pour les entiers. En MySQL ce n'est pas efficace.Raison d'utiliser DECIMAL (31,0)

Répondre

4

Oracle implémente le « integer » ANSI type de données comme synonyme de NUMBER (38)

Pour plus de détails, voir « Learn Oracle: Datatypes for SQL and PL/SQL, Numbers »

Cependant, le tableau suivant doit être utilisé comme correspondance entre les types de données Oracle et MySQL:

"Oracle® Database SQL Developer Supplementary Information for MySQL Migrations"

Oracle et MySQL> Types de données Comparée> Comparaison des types de données

La principale différence, comme expliqué here et here est que Oracle NUMBER format est le type de données de longueur variable tandis que MySQL DECIMAL (n) type de données utilisé pour être represented as strings that require one byte per digit or sign character (avant la version 5.0.3)

(Oracle NUMBER Datatype) Format numérique interne

La base de données Oracle stocke les données numériques au format de longueur variable . Chaque valeur est stockée en notation scientifique, avec 1 octet utilisé pour stocker l'exposant et pour 20 octets pour stocker la mantisse. La valeur résultante est limitée à 38 chiffres de précision. Oracle Database ne stocke pas les zéros de début et de fin . Par exemple, le numéro 412 est stocké dans un format similaire à 4.12 x 102, avec 1 octet utilisé pour stocker l'exposant (2) et 2 octets utilisés pour stocker les trois chiffres significatifs de la mantisse (4,1 , 2). Les nombres négatifs incluent le signe dans leur longueur.

Compte tenu de cela, la colonne taille en octets pour une valeur de données numérique particulier NUMBER (p), où p est la précision d'une valeur donnée, peut être calculé selon la formule suivante:

ROUND((length(p)+s)/2))+1

où s est égal à zéro si le nombre est positif , et s est égal à 1 si le nombre est négatif.

zéro et positif et négatif infini (uniquement généré sur l'importation de base de données Oracle, version 5) sont stockées en utilisant des représentations uniques. L'infini zéro et négatif de nécessite 1 octet; L'infini positif nécessite 2 octets.

et

(MySQL) Type de données DECIMAL Changements

Les exigences de stockage pour le nombre entier et les fractions de chaque valeur sont déterminés séparément. Chaque multiple de neuf chiffres nécessite quatre octets, et tous les chiffres restants laissés nécessitent une fraction de quatre octets. [...]

Par exemple, un DECIMAL (18,9) colonne comporte neuf chiffres de part et d'autre du point décimal , de sorte que la partie entière et la partie fractionnaire exigent chacun quatre octets. Une colonne DECIMAL (20,6) a quatorze chiffres entiers et six chiffres fractionnaires. Les chiffres entiers requièrent quatre octets pour neuf des chiffres et trois octets pour les cinq chiffres restants. Les six chiffres fractionnaires nécessitent trois octets.