Ditt problem har något att göra med hur stort ditt flyttalsvärde är men jag är inte 100% säker på varför. Jag testade att uppdatera en liknande rad med mindre siffror och det fungerade bra. Du bör också avstå från att använda citat när det är möjligt eftersom det kräver extra bearbetning. Se denna SO-fråga:uppdatera en kolumn genom att subtrahera en kolumn värde
Här är min enkla lösning precis som Tim Biegeleisen föreslog:
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;
Infoga:
USE dbname;
insert into xxx Values(1234, 99959040.00, 0.00, 99999.00);
Uppdatera utan strängar:
update xxx set money = money - 20 where uid = 1234;
Det finns en del udda saker när man räknar med stora flyttalsvärden. Vissa av dessa problem är maskinberoende och är relaterade till vilken typ av processor du har. Läs mer här:http://dev.mysql .com/doc/refman/5.7/en/problems-with-float.html
Enligt en annan SO-fråga är flyttalsvärden INTE ett bra sätt att lagra pengar. Skillnaden mellan flytande och decimal datatyp (se det andra svaret).
Det verkar som att använda decimal
och numeric
datatyper är bäst för pengar-kolumner i mysql.