MySQL计算大数BIGINT绕过

时间:2013-12-21 13:05:10

标签: mysql bigint

我的应用程序需要处理高达10 ^ 45的正数。 我有一个表统计:somenumber BIGINT 在此表中,我有以下条目:“somenumber = 775488948283” 我想让MySQL返回775488948283000000000000000000000000000。

我试过

    SELECT 
    (

   SELECT somenumber FROM stats LIMIT 1

   )*1000000000000000000000000000 as bignumber;

但是我收到了一个MySQL错误:ERROR 1690(22003):BIGINT值超出范围......

我不明白,当我进行双重选择时,我不在统计表中,为什么MySQL告诉我它太大了,我怎么能让MySQL将这个数字乘以1000000000000000000000000000并给我结果?

3 个答案:

答案 0 :(得分:0)

BIGINT的最大值是:

9,223,372,036,854,775,807

答案 1 :(得分:0)

当结果值超过MAX UNSIGNED范围值时,您无法直接处理整数。相反,您必须使用type promotion对结果值使用cast方法。

以下内容应该有效。

SELECT
   CAST( 
     ( SELECT my_big_int_num FROM STATS LIMIT 1 ) AS DECIMAL
   ) * 1000000000000000000000000000 as big_big_number

请参阅 MySQL: Out-of-Range and Overflow Handling

答案 2 :(得分:0)

如果你跑:

SELECT 775488948283*1000000000000000000000000000 as bignumber;

您将得到正确答案,但表示为浮点数(指数形式)。

如果你跑:

SELECT cast(775488948283*1000000000000000000000000000 as char(255)) as bignumber;

您将获得所需的输出。

您还可以将值转换为字符串,然后附加零:

select concat(cast(775488948283 as char(255)),
              '000000000000000000000000000'
             )

我会用最后一个。对于浮点数,您总是冒着最低位数可能变成其他数字的风险 - 精度不足以存储45位数。

在数据库中,您可能希望将该数字存储为decimal(65, 0),以便最好地代表您的数据。