我想將貨幣值保存在一個MySQL數據庫 - curreny_data表。所以我創建了一個sale_price字段,它是一個雙重無符號的。當我要保存負值db時,會生成一個錯誤並保存默認值零(0)。但是當我要保存減零(-0)時,它可以成功保存。我很困惑。請我需要一些幫助。mysql數據庫保存減去零在一個無符號的雙字段
3
A
回答
3
是不是很明顯嗎?一個無符號的double(假設存在這種類型)只接受無符號的,即非負的double值。 MySQL足夠聰明地知道-0與0相同,所以它可以讓你在現場投入-0。 OTOH,負數(根據字段的定義)是不允許的,所以你得到一個錯誤。 -0 = 0在where子句中,但不是一羣人:如果你重新定義字段作爲decimal
型
1
- 一般情況下,你應該使用 「十進制」 來存儲貨幣,而不是雙:
http://www.stemkoski.com/how-to-properly-store-currencymoney-in-mysql/
我很好奇,爲什麼你認爲-0 「成功保存」 :
a)你能看到double值的符號位嗎?
b)或者您是否僅僅看不到錯誤異常?
無論哪種方式 - 有什麼區別?爲了數錢,不是零總是零嗎?
1
1
注意幾個古怪
負值會工作。 和-0通過mysqldump/restore進行0轉換(可能會導致slave的問題...)
create table testnegzero (n double);
insert into testnegzero values (0.001), (-0.001);
update testnegzero set n = round(n);
select * from testnegzero ;
+------+
| n |
+------+
| 0 |
| -0 |
+------+
(你也可以拿出-0到一些計算)
select count(*) from testnegzero where n=0;
+----------+
| count(*) |
+----------+
| 2 |
+----------+
select count(*) from testnegzero group by n;
+----------+
| count(*) |
+----------+
| 1 |
| 1 |
+----------+
我發現自己試圖清除這些了,這是不容易的,因爲你不能搜索「,其中COL爲-0「 後來我做了這樣的說法:
確定受影響的列:
select * from testnegzero where cast(n as char(20))="-0";
+------+
| n |
+------+
| -0 |
+------+
清除它們:
update testnegzero set n=0 where cast(n as char(20))="-0";
select * from testnegzero ;
+------+
| n |
+------+
| 0 |
| 0 |
+------+
相關問題
- 1. 如何將一個無符號字符數組保存到MySQL
- 2. 如何從數據庫字段減去一個值
- 3. 如何從最小結果爲零的MySQL字段中減去?
- 4. 保存數據庫中的符號
- 5. 減去一個字符一個時間
- 6. 從較小的一箇中減去一個大的無符號二進制數
- 7. 將數據保存到mysql中的奇怪字符數據庫
- 8. 如何從幾個MySQL字段中減去一定的值
- 9. 在MySQL中減去兩個帶有時間數據類型的字段
- 10. 在Ruby on Rails中減去數據表的2個字段
- 11. 來自數據庫的PHP LOOP並保存到一個字段
- 12. 減去零
- 13. 在JavaScript中減去帶符號整數
- 14. 保存表單字段爲sql數據庫 - 只保存數字?
- 15. MYSQL DateTime vs strtotime字符串保存在數據庫中
- 16. Cakephp 3+保存數組在mysql的一個字段
- 17. Mysql查詢需要減去無法引用的字段
- 18. 減去2個不同的雙打產生零
- 19. 簡單整數字段保存爲零
- 20. C - 從另一個字符串中減去一個字符串
- 21. 程序集:減去有符號字
- 22. 如何隨機抽取一個零字符的字段mysql
- 23. PHP - 將動態字段保存到MySQL數據庫
- 24. 遞減mysql中去通過零
- 25. 雙重字符串保持結尾零
- 26. 在不存在的行中用負數減去兩個mysql表
- 27. Laravel - 只有一個零保存到數據庫
- 28. 加入和減去浮點數從無符號短在C
- 29. 減去該字段中的兩個值
- 30. 將javascript保存到一個mysql數據庫+複製一個dataURL
謝謝Pranav Hosangadi。 – Sara