Dit problem har noget at gøre med, hvor stor din floating point-værdi er, men jeg er ikke 100% sikker på hvorfor. Jeg testede at opdatere en lignende række med mindre tal, og det fungerede fint. Du bør også undlade at bruge tilbud, hvor det er muligt, da det kræver ekstra behandling. Se dette SO-spørgsmål:opdater en kolonne ved at trække en kolonne fra værdi
Her er min nemme løsning, ligesom Tim Biegeleisen foreslog:
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;
Indsæt:
USE dbname;
insert into xxx Values(1234, 99959040.00, 0.00, 99999.00);
Opdatering uden strenge:
update xxx set money = money - 20 where uid = 1234;
Der er nogle mærkelige ting, når man regner med store flydende kommaværdier. Nogle af disse problemer er maskinafhængige og er relateret til, hvilken type processor du har. Læs mere her:http://dev.mysql .com/doc/refman/5.7/en/problems-with-float.html
Også ifølge et andet SO-spørgsmål er flydende pointværdier IKKE en god måde at opbevare pengeværdier på. Forskel mellem flydende og decimal datatype (se det andet svar).
Det ser ud til at bruge decimal
og numeric
datatyper er bedst for penge-kolonner i mysql.