猿问

mysql varchar(38) 统计问题

数据库有个 doneNum 的字段,表示完成数量。当初设计为 varchar(38),是考虑到这个进度问题。

现在有个需求,需要根据某个条件分组,然后对 doneNum 进行求和,如果直接用 sum(doneNum)求和,结果变成了科学计数法,有可能导致进度损失,而如果放在程序中,遍历求和,效率太低了。

https://img3.mukewang.com/5c8f3f5600018d4201920230.jpg

请教大家,有没有别的解决方案?

守着星空守着你
浏览 573回答 3
3回答

白猪掌柜的

项目中,有两种解决方案: 依旧使用varchar(38)来存储,汇总在程序中实现。 PHP使用BCMath,可以保证精度不会丢失。 使用decimal(20,18)来存储,这样方便对账,通过SQL就可以对账,而不需要使用程序来统计。

慕容森

量不大的话,直接改数据库字段类型,原始内容写脚本处理一下。 量大的话,可以选择预处理吧,在需求一定不变的情况下,定时处理计算出来,临时存放结果。

潇潇雨雨

先完成紧急的业务需求,之后在重新弄个int(38)的字段,因为本身这个就该弄成整数的,再去填充数值,而没必要去弄个varchar ,或者你直接给varchar添加个索引
随时随地看视频慕课网APP
我要回答