El mejor tipo de datos para almacenar valores monetarios en MySQL

Resuelto Mohammad Saberi asked hace 12 años • 14 respuestas

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)?

Mohammad Saberi avatar Oct 23 '12 19:10 Mohammad Saberi
Aceptado

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)
  • 15es la precisión (longitud total del valor incluyendo decimales)
  • 2es 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 .

juergen d avatar Oct 23 '2012 12:10 juergen d

Puedes usar DECIMALo NUMERICambos 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)

Configuraciones de ejemplo

Buena lectura

NullPoiиteя avatar Oct 23 '2012 12:10 NullPoiиteя

Prefiero usar BIGINTy 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 realizamos currency * currencymultiplicaciones; en caso de que las hagamos, dividimos el resultado entre 100 y lo almacenamos para que vuelva a tener la precisión adecuada.

Dinesh P.R. avatar Sep 03 '2014 07:09 Dinesh P.R.