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.

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top