• SQL语句中 int 溢出 + Asp语句中 Long 溢出


    晚上5点多,同事在QQ告诉我,一个用户向他反应,在他登录的时候显示错误信息,我们在管理平台查看该用户的基本信息时,也显示错误信息。

    经过初步分析,原来是在执行 SQL语句的时候发生Int溢出:

    sql = "select sum(fileSize) as fsTotal from pic where userID = 1632"

    本来这段SQL是用来取得一个用户之前上传的所有文件大小的合计数。

    fileSize 字段类型 int

    当用户上传的文件累计大小超过 2G(2147483648字节),再执行 sum(fileSize) 就会发生Int溢出。

    找到问题的原因后,开始修改 sql语句:

    sql = "select sum(cast(fileSize as bigint)) as fsTotal from pic where userID = 1632"

    修改后,再测试发现还是有错误,不过这个时候的错误不是因为这段SQL,而是来自 asp 的 long 溢出。

    sql = "select sum(cast(fileSize as bigint)) as fsTotal from pic where userID = 1632"
    set re=conn.execute(sql)
    if not re.eof then
        fsTotal = re.fields("fsTotal ")
        fsTotal = fsTotal / 1024 / 1024 '转换成MB - 发生 long 溢出
    end if

    修改代码:

    fsTotal = re.fields("fsTotal ")
    fsTotal = cdbl(fsTotal ) '先转换成 double型,再进行下一步的操作
    fsTotal = fsTotal / 1024 / 1024 '转换成MB

    -----------------------------------------------------------------------------------------------------------

    SQL Server,int类型值最大2147483647(2^31 - 1)
    ASP,Long (长整型) 4 个字节 -2,147,483,648 到 2,147,483,647

    2010-11-03

  • 相关阅读:
    [BZOJ4199][NOI2015]品酒大会
    [BZOJ4198][Noi2015]荷马史诗
    [BZOJ4197][Noi2015]寿司晚宴
    [BZOJ4196][NOI2015]软件包管理器
    2016-11-15NOIP模拟赛
    2016.6.30模拟赛
    BZOJ3672: [Noi2014]购票
    UOJ#191. 【集训队互测2016】Unknown
    第四届CCF软件能力认证(CSP2015) 第五题(最小花费)题解
    bzoj3926: [Zjoi2015]诸神眷顾的幻想乡 对[广义后缀自动机]的一些理解
  • 原文地址:https://www.cnblogs.com/personnel/p/4583023.html
Copyright © 2020-2023  润新知