Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Quando adiciono xx à coluna float do mysql, é um resultado errado, é um bug?


Seu problema tem algo a ver com o tamanho do seu valor de ponto flutuante, mas não tenho 100% de certeza do porquê. Eu testei atualizar uma linha semelhante com números menores e funcionou bem. Você também deve evitar usar aspas sempre que possível, pois requer processamento extra. Veja esta pergunta SO:atualize uma coluna subtraindo um valor

Aqui está minha solução fácil, assim como Tim Biegeleisen sugeriu:
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;

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

Atualização sem strings:
update xxx set money = money - 20 where uid = 1234;

Existem algumas coisas estranhas ao calcular com grandes valores de ponto flutuante. Alguns desses problemas dependem da máquina e estão relacionados ao tipo de processador que você possui. Leia mais aqui:http://dev.mysql .com/doc/refman/5.7/en/problems-with-float.html

Além disso, de acordo com outra pergunta SO, os valores de ponto flutuante NÃO são uma boa maneira de armazenar valores monetários. Diferença entre o tipo de dados float e decimal (veja a segunda resposta).

Parece que usar decimal e numeric tipos de dados são melhores para colunas de dinheiro no mysql.