Masalah Anda ada hubungannya dengan seberapa besar nilai floating point Anda, tetapi saya tidak 100% yakin mengapa. Saya menguji memperbarui baris yang sama dengan angka yang lebih kecil dan berfungsi dengan baik. Anda juga harus menahan diri untuk tidak menggunakan tanda kutip sedapat mungkin karena memerlukan pemrosesan ekstra. Lihat pertanyaan SO ini:perbarui kolom dengan mengurangi a nilai
Inilah solusi mudah saya seperti yang disarankan 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;
Sisipkan:
USE dbname;
insert into xxx Values(1234, 99959040.00, 0.00, 99999.00);
Perbarui tanpa string:
update xxx set money = money - 20 where uid = 1234;
Ada beberapa hal yang aneh saat menghitung dengan nilai floating point yang besar. Beberapa masalah ini bergantung pada mesin dan terkait dengan jenis prosesor yang Anda miliki. Baca selengkapnya di sini:http://dev.mysql .com/doc/refman/5.7/en/problems-with-float.html
Juga, menurut pertanyaan SO lainnya nilai floating point BUKAN cara yang baik untuk menyimpan nilai uang. Perbedaan antara tipe data float dan desimal (lihat jawaban kedua).
Tampaknya menggunakan decimal
dan numeric
tipe data yang terbaik untuk kolom uang di mysql.