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.