我想将货币值保存在一个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