1.公司项目有一个功能需求,需要存储游戏中的金币数量,并且需要做金币排行榜的功能。
2.假如金币总位数不超过20的话,可以用bigint字段,但是游戏中的金币数据会上升得很快,看样子也是不够。
3.考虑过用科学计数法分开基数和指数来存放成两个字段,不过decimal(31,30)字段的小数点后最大精确度是30位,超过的会被忽略,感觉还是会有一个上限在。
4.想问究竟一般怎么存放这种没有什么上限,又比较大的数字在数据库的,而且又能实现排序功能?
1.公司项目有一个功能需求,需要存储游戏中的金币数量,并且需要做金币排行榜的功能。
2.假如金币总位数不超过20的话,可以用bigint字段,但是游戏中的金币数据会上升得很快,看样子也是不够。
3.考虑过用科学计数法分开基数和指数来存放成两个字段,不过decimal(31,30)字段的小数点后最大精确度是30位,超过的会被忽略,感觉还是会有一个上限在。
4.想问究竟一般怎么存放这种没有什么上限,又比较大的数字在数据库的,而且又能实现排序功能?
我知道这不是一个好答案
但我真的想问一句,贵公司有游戏策划吗,不考虑通货膨胀吗
20位的金钱以分为单位在现实世界里也没有任何人能达到如此财富吧
先不谈可不可能如此增长,20位的金钱,这个界面怎么显示,就算以万为单位也很长吧
看了楼1的回答和楼主对楼1的评论。要是你确实想存储过长的数字,那肯定会超过int、bigint、decimal这样专属的数字类型的。正如楼1所说现实中过于大的数字基本上用不到。即使苹果市值400多亿用decimal基本上也可以存储完了。
给你两个建议吧。
1、数据的单位设定为万。用decimal,保持6位小数。
2、用text或varchar或char存储成字符串,用的时候再格式化类型。(一般基本上没人这么玩,所以还是考虑第一种吧)
其次,我见过一些客户不知从哪里听来的高并发要如何解决。一做项目就问如果访问量几十万怎么解决?事实上他们的项目基本运行不超过5个月,访问量也就那么千八百人。所以也建议兄弟不要考虑过于长久的事情。
15 回答8.4k 阅读
5 回答4.8k 阅读✓ 已解决
8 回答6.2k 阅读
4 回答4.4k 阅读✓ 已解决
5 回答3.2k 阅读✓ 已解决
4 回答3.8k 阅读✓ 已解决
4 回答2.4k 阅读✓ 已解决
这里说说我最后的解决方法,用一个varchar的字段完整地保存数据,并且用于和前端做交互。另外把数字拆分成科学计数法里面的基数和指数,然后用两个字段分别保存基数(decimal(18,17))和指数(smallint)用于排序,也是就排序的精度是没那么高的,适用于精确度不是很高的排行榜。
举例:一个123456789的字段会被存储成“123456789”,“1.23456789”,“8”