sql >> Base de Datos >  >> RDS >> Mysql

Cuando agrego xx a la columna flotante de mysql, es un resultado incorrecto, ¿es un error?

Su problema tiene algo que ver con el tamaño de su valor de coma flotante, pero no estoy 100% seguro de por qué. Probé actualizando una fila similar con números más pequeños y funcionó bien. También debe abstenerse de usar comillas siempre que sea posible, ya que requiere un procesamiento adicional. Consulte esta pregunta SO:actualice una columna restando un valor

Esta es mi solución sencilla, como sugirió Tim Biegeleisen:

CREATE TABLE `xxx` (
  `uid` int(11) NOT NULL,
  `money` decimal(10,2) NOT NULL DEFAULT '0.00' ,
  `real_money` float(10,2) NOT NULL ,
  `available_invoice` float(10,2) DEFAULT NULL,
  PRIMARY KEY (`uid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

Insertar:

USE dbname;
insert into xxx Values(1234, 99959040.00, 0.00, 99999.00);

Actualizar sin ataduras:

update xxx set money = money - 20 where uid = 1234;

Hay algunas cosas extrañas cuando se calcula con valores de punto flotante grandes. Algunos de estos problemas dependen de la máquina y están relacionados con el tipo de procesador que tiene. Lea más aquí:http://dev.mysql .com/doc/refman/5.7/en/problems-with-float.html

Además, de acuerdo con otra pregunta SO, los valores de coma flotante NO son una buena manera de almacenar valores de dinero. Diferencia entre tipo de datos flotante y decimal (ver la segunda respuesta).

Parece que usando decimal y numeric los tipos de datos son mejores para las columnas de dinero en mysql.