El mejor tipo de datos para almacenar valores monetarios en MySQL
Quiero almacenar muchos registros en una base de datos MySQL. Todos ellos contienen valores monetarios. Pero no sé cuántos dígitos se insertarán en cada uno.
¿Qué tipo de datos debo utilizar para este fin? ¿
VARCHAR o INT (u otros tipos de datos numéricos)?
Dado que el dinero necesita una representación exacta, no utilice tipos de datos que sean sólo aproximados como float
. Puede utilizar un tipo de datos numéricos de punto fijo para cosas como
decimal(15,2)
15
es la precisión (longitud total del valor incluyendo decimales)2
es el número de dígitos después del punto decimal
Ver tipos numéricos de MySQL :
Estos tipos se utilizan cuando es importante preservar la precisión exacta, por ejemplo con datos monetarios .
Puedes usar DECIMAL
o NUMERIC
ambos son iguales.
Los tipos DECIMAL y NUMERIC almacenan valores de datos numéricos exactos. Estos tipos se utilizan cuando es importante preservar la precisión exacta, por ejemplo con datos monetarios. En MySQL, NUMERIC se implementa como DECIMAL, por lo que las siguientes observaciones sobre DECIMAL se aplican igualmente a NUMERIC. : MySQL
es decir DECIMAL(10,2)
Buena lectura
Prefiero usar BIGINT
y almacenar los valores multiplicando por 100 , para que se convierta en un número entero.
Por ejemplo, para representar un valor de moneda de 93.49
, el valor se almacenará como 9349
, mientras se muestra el valor que podemos dividir por 100 y mostrar. Esto ocupará menos espacio de almacenamiento.
Precaución:
En general, no realizamoscurrency * currency
multiplicaciones; en caso de que las hagamos, dividimos el resultado entre 100 y lo almacenamos para que vuelva a tener la precisión adecuada.