【问题标题】:MySQL Automatically Calculate IBAN bigint overflowMySQL 自动计算 IBAN bigint 溢出
【发布时间】:2013-12-22 15:25:50
【问题描述】:

这是我在stackoverflow中发布的第一个问题,希望有人可以帮助我。到目前为止,我在这里找不到任何人提出类似的问题。

我想检查一下德国的 IBAN 是否正确。原则上,这很容易:将 Bank_number(8 位)与 Account_Number(10 位)、相当于 DE 的数字(1314 = 4 位)和支票号码(2 位)连接起来,然后计算模除法和结果应该是 1。

这是我输入 MySQL 的代码:

SELECT MOD(500105175404777100131451,97) as a
     , MOD(CONVERT(CONCAT("50010517","5404777100","1314","51"), UNSIGNED),97) as b
     , CONVERT(CONCAT("50010517","5404777100","1314","51"), UNSIGNED) as c

这是我从 MySQL 得到的结果:

a   b    c
1   60   18446744073709551615

如您所见,当我手动输入整个数字时,我得到了正确的结果 (1),但是当我尝试从单独的字符串构造数字时(以这种格式,它们迄今为止保存在数据库中) , 模除法不起作用,因为字符串被错误地转换为数字。

谁能告诉我可能是什么问题?

我尝试了“BIGINT”而不是“UNSIGNED”,但随后出现错误

"You have an error in your SQL syntax; check the manual that corresponds to your MariaDB
server version for the right syntax to use near 'BIGINT"

任何帮助将不胜感激。

谢谢 斯蒂芬

【问题讨论】:

    标签: mysql modulo bigint iban


    【解决方案1】:

    使用DECIMAL(24) 数字类型。

    SELECT MOD(500105175404777100131451,97) as a
         , MOD(CONVERT(CONCAT("50010517","5404777100","1314","51"), decimal(24)),97) as b
         , CONVERT(CONCAT("50010517","5404777100","1314","51"), decimal(24)) as c
    

    【讨论】:

      猜你喜欢
      • 2013-06-16
      • 1970-01-01
      • 2019-12-05
      • 2021-10-28
      • 2013-11-21
      • 1970-01-01
      • 2021-08-14
      • 1970-01-01
      • 2021-09-04
      相关资源
      最近更新 更多