MySQL查询字段*一个数导致内存溢出

问题遇到的现象

在查询某一列的的时候,让这个字段乘了一个数,结果查询出来多了好多999999

问题相关代码

SELECT * FROM 进项发票信息
select 金额*10 from 进项发票信息;

运行结果及

img

我的解答思路
我想要达到的结果

怎么才能正常显示查询后的结果

捂脸,为什么要在SQL 里面进行计算?非必要还是在程序里进行吧,你这样不仅可能字段数值过大,还把索引整失效了,SQL 执行都变慢了

没有乘10的原始数据是什么

select 金额*10 from 进项发票信息;
金额的这个字段的类型是什么? 最大值是多少,乘以10是否超出对应的数据类型的存储范围呢

是不是超过字段设置的最大长度了

select 金额10 from 进项发票信息;
这样查询的结果,是把“进项发票信息”表中的字段“金额” ,所有值都变大了10倍,已经超出改字段数据类型的存储范围了
10去掉呢

1.建议不要在sql语句中进行运算
2.建议在查询语句中加上检索条件,检索条件的字段尽量有索引,这样能够有效提高查询效率
3.如果非要在sql中进行计算,尽量在查询条件中过滤出值是null和空的数据

你这个看不出来什么问题。

最好把金额这一列的原始值也打印出来,这样对比一下,大家更好帮你排查原因。

select 金额, 金额*10 from 进项发票信息;

一方面看下是否超出数据类型的最大取值范围了,另一方面看下设计的长度范围

精度问题,你把乘后的数据的精度处理一下就好了

先把数据用string类型查出来
mysql: select 金额+'' from 进项发票信息;
oracle: select to_char(金额) from 进项发票信息;
看看数据是否正确,如果不正确再进行下一步判断

估计超过数据类型的最大值了

是不是数据溢出 了

改这样就行了:

select (金额*10) from 进项发票信息;

如下两图:

img

img

可能是超过字段的最大长度了,初始值不运算结果是否正常