mysql varchar(38) 统计问题

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

clipboard.png

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

clipboard.png

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

阅读 3.1k
3 个回答

项目中,有两种解决方案:

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

量不大的话,直接改数据库字段类型,原始内容写脚本处理一下。

量大的话,可以选择预处理吧,在需求一定不变的情况下,定时处理计算出来,临时存放结果。

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题