我想将货币值保存在一个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. python scraper不能保存mysql数据库中的度数符号
- 5. 保存数据库中的符号
- 6. 减去一个字符一个时间
- 7. 从较小的一个中减去一个大的无符号二进制数
- 8. 将数据保存到mysql中的奇怪字符数据库
- 9. 访问数据库双字段值未正确保存
- 10. 从字段中减去数据 - PostgreSQL
- 11. mongo减去两个字段
- 12. 如何从几个MySQL字段中减去一定的值
- 13. 在MySQL中减去两个带有时间数据类型的字段
- 14. 在Ruby on Rails中减去数据表的2个字段
- 15. 在MySQL数据库中保存表单字段usinf Flex
- 16. Django ModelForm中的一个字段(ManyToMany)未保存到数据库
- 17. 来自数据库的PHP LOOP并保存到一个字段
- 18. 是一个双倍的无符号无符号长总是一个双?
- 19. 保存字符串时日期时间字段保存零值
- 20. 减去零
- 21. 保存表单字段为sql数据库 - 只保存数字?
- 22. 在JavaScript中减去带符号整数
- 23. 如何从一个字符中减去一个数字(int)
- 24. PHP用字符串输入字段值保存到mySql数据库
- 25. 存储用双引号一个字转换成字符数组
- 26. 在MySQL数据库中保存UTF-8字符
- 27. MYSQL DateTime vs strtotime字符串保存在数据库中
- 28. 如何在MySQL数据库中保存印地文字符
- 29. 爪哇,减去双数据类型
- 30. Cakephp 3+保存数组在mysql的一个字段
谢谢Pranav Hosangadi。 – Sara