sql >> Database >  >> RDS >> Mysql

Wanneer ik xx toevoeg aan de mysql float-kolom, is het een verkeerd resultaat. Is het een bug?

Uw probleem heeft iets te maken met hoe groot uw drijvende-kommawaarde is, maar ik weet niet 100% zeker waarom. Ik heb getest om een ​​vergelijkbare rij met kleinere getallen bij te werken en het werkte prima. U moet ook afzien van het gebruik van aanhalingstekens waar mogelijk, omdat dit extra verwerking vereist. Zie deze SO-vraag:werk een kolom bij door een waarde

Hier is mijn eenvoudige oplossing, zoals Tim Biegeleisen suggereerde:

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;

Invoegen:

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

Update zonder strings:

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

Er zijn enkele vreemde dingen bij het rekenen met grote drijvende-kommawaarden. Sommige van deze problemen zijn machine-afhankelijk en hebben te maken met het type processor dat u heeft. Lees hier meer:​​http://dev.mysql .com/doc/refman/5.7/en/problems-with-float.html

Volgens een andere SO-vraag zijn drijvende-kommawaarden GEEN goede manier om geldwaarden op te slaan. Verschil tussen float en decimaal gegevenstype (zie het tweede antwoord).

Het lijkt erop dat het gebruik van decimal en numeric gegevenstypen zijn het beste voor geldkolommen in mysql.




  1. Het tegenovergestelde van Distinct in MySQL

  2. EF Core `update-database` op MySql mislukt met `__EFMigrationsHistory' bestaat niet`

  3. Geautomatiseerde manier om XML-bestanden naar SQL-database te converteren?

  4. Dubbele rijen elimineren in Postgres