Razón para utilizar DECIMAL (31,0)
-
19-09-2019 - |
Pregunta
¿Cuál es la razón de que algunas personas de fondo de Oracle están utilizando DECIMAL (31,0) para los números enteros. En MySQL no es eficiente.
Solución
Oracle implementa el "INTEGER" tipo de datos ANSI como sinónimo de NÚMERO (38)
Para más detalles ver " Aprender Oracle: Tipos de datos de SQL y PL / SQL, números "
Sin embargo, la siguiente tabla se debe utilizar como un mapeo entre tipo de datos en Oracle y MySQL:
"complementario Oracle de base de datos SQL Developer información para MySQL migraciones "
Oracle y MySQL comparación> Tipos de datos> Comparación de tipos de datos
La principal diferencia, como se explica aquí y aquí es que el número Oracle tipo de datos es el formato de longitud variable, mientras que MySQL DECIMAL (n) de tipo de datos usado para ser represented as strings that require one byte per digit or sign character
(antes de la versión 5.0.3)
(NÚMERO de Oracle Tipo de datos) Formato numérico interno
Oracle base de datos almacena los datos numéricos en formato de longitud variable. Cada valor es almacenado en notación científica, con 1 bytes utilizado para almacenar el exponente y hasta 20 bytes para almacenar la mantisa. los valor resultante se limita a 38 dígitos de precisión. base de datos Oracle no almacena iniciales y finales ceros. Por ejemplo, el número 412 es almacenada en un formato similar al 4.12 x 102, con 1 byte utiliza para almacenar el exponente (2) y 2 bytes utilizados para almacenar los tres dígitos significativos de la mantisa (4,1,2). Números negativos incluir el signo en su longitud.
Teniendo esto en cuenta, la columna tamaño en bytes para una numérico particular, NÚMERO valor de datos (p), donde p es la precisión de un valor dado, puede ser calcula utilizando la siguiente fórmula:
ROUND((length(p)+s)/2))+1
donde s es igual a cero si el número es positivo y s es igual a 1 si el número es negativo.
cero y positiva y negativa el infinito (sólo generada en la importación de base de datos Oracle, Versión 5) son almacenado utilizando representaciones únicas. Cero y el infinito negativo cada requiere 1 byte; infinito positivo requiere 2 bytes.
y
(MySQL) tipo de datos DECIMAL cambios
Los requisitos de almacenamiento para la número entero y partes fraccionarias de cada valor se determina por separado. Cada múltiplo de nueve dígitos requiere de cuatro bytes, y todos los dígitos restantes abandonaron sobre requerir alguna fracción de cuatro bytes. [...]
Por ejemplo, un DECIMAL (18,9) columna tiene nueve dígitos a ambos lados de la punto decimal, por lo que la parte entera y la parte fraccionaria cada requieren cuatro bytes. A (20,6) columna DECIMAL tiene catorce dígitos enteros y seis dígitos fraccionarios. Los dígitos enteros requiere cuatro bytes para nueve de la dígitos y tres bytes para el restante cinco dígitos. El seis dígitos fraccionarios requieren tres bytes.