あなたの問題は、浮動小数点値の大きさに関係していますが、その理由は100%わかりません。同様の行を小さい数値で更新することをテストしましたが、正常に機能しました。また、余分な処理が必要になるため、可能な限り引用符を使用しないでください。このSOの質問を参照してください:値
Tim Biegeleisenが提案したように、これが私の簡単な回避策です:
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;
挿入:
USE dbname;
insert into xxx Values(1234, 99959040.00, 0.00, 99999.00);
文字列なしで更新:
update xxx set money = money - 20 where uid = 1234;
大きな浮動小数点値で計算する場合、いくつかの奇妙なことがあります。これらの問題のいくつかはマシンに依存し、使用しているプロセッサのタイプに関連しています。詳細はこちら: http://dev.mysql .com / doc / refman / 5.7 / en / problem-with-float.html
また、別のSOの質問によると、浮動小数点値はお金の値を格納するための良い方法ではありません。 floatデータ型とdecimalデータ型の違い (2番目の回答を参照してください。)
decimal
を使用しているようです およびnumeric
データ型は、mysqlのお金の列に最適です。