Tabla de contenidos
MySQL 5 introduce matemáticas de precisión, esto es, tratamiento numérico que proporciona resultados más precisos y más control sobre valores inválidos que en versiones anteriores de MySQL. La matemática de precisión se basa en dos cambios de implementación:
-
La introducción de nuevos modos SQL en MySQL 5.0.2 que controlan lo estricto que es el servidor para aceptar o rechazar datos inválidos.
-
La introducción en MySQL 5.0.3 de una biblioteca para aritmética de punto fijo.
Estos cambios tienen varias implicaciones para operaciones numéricas:
-
Cálculos más precisos.
Para números exactos, los cálculos no introducen error en coma flotante. En su lugar, se usa precisión exacta. Por ejemplo, un número tal como .0001 se trata como un valor exacto en lugar de valor aproximado, y sumarlo 10,000 veces produce un resultado de 1, no un valor "cercano" a 1.
-
Comportamiento bien definido para el redondeo.
Para números exactos, el resultado de
ROUND()
depende de sus argumentos, no de factores tales como el comportamiento de la biblioteca C subyacente. -
Independencia de plataforma mejorada.
Las operaciones con números exactos son los mismos entre distintas plataformas tales como Windows y Unix.
-
Control sobre tratamiento de datos inválidos.
Desbordamiento y división por cero pueden detectarse y tratarse como errores. Por ejemplo, puede tratar un valor que es demasiado grande para una columna como un error en lugar de truncarlo para adaptarlo al rango del tipo de datos. Similarmenet, puede tratar la división por cero como un error en lugar que como una operación que produce un resultado de
NULL
. La elección de qué aproximación seguir se determina mediante la variable de sistemasql_mode
.
Un resultado importante de estos cambios es que MySQL proporciona un mejor cumplimiento del estándar SQL.
La siguiente discusión cubre varios aspectos de cómo funciona la matemática de precisión (incluyendo posibles incompatibilidades con aplicaciones anteriores). Al final, se dan algunos ejemplos que demuestran cómo MySQL 5 trata operaciones numéricas de forma más precisa que anteriormente.
El ámbito de matemáticas de precisón para operaciones de
valores exactos incluyen tipos de datos precisos
(DECIMAL
y tipos interos) y literales de
valores numéricos exactos. Los tipos de datos aproximados y
literales numéricos se tratan como valores en coma flotante.
Literales numéricos de valores exactos tienen una parte entera o
fraccional, o ambas. Pueden tener signo. Ejemplos:
1
, .2
,
3.4
, -5
,
-6.78
, +9.10
.
Literales de valores numéricos aproximados se representan en
notación científica con una mantisa y exponente. Una o ambas
partes pueden tener signo. Ejemplos: 1.2E3
,
1.2E-3
, -1.2E3
,
-1.2E-3
.
Números que parecen similares no necesitan ser ambos valores
exactos o aproximados. Por ejemplo, 2.34
es un
valor exacto (punto fijo), mientras que 2.34E0
es un valor aproximado (coma flotante).
El tipo de datos DECIMAL
es un tipo de punto
fijo y los cálculos son exactos. En MySQL, el tipo
DECIMAL
tiene varios sinónimos:
NUMERIC
, DEC
,
FIXED
. El tipo entero también es un tipo de
valor exacto.
Los tipos de datos FLOAT
y
DOUBLE
son tipos de coma flotante y los
cálculos son aproximados. En MySQL, los tipos sinónimos de
FLOAT
o DOUBLE
son
DOUBLE PRECISION
y REAL
.