【问题标题】:Incorrect Integer (2147483647) is inserted into MySQL?不正确的整数(2147483647)被插入到 MySQL 中?
【发布时间】:2021-07-23 05:29:55
【问题描述】:

好的,所以我一直在玩弄 Steam Web API,我将其中一个值存储在一个名为 $steam64 的变量中。当我使用此代码剪辑器将其插入 mysql 数据库时,它会插入一个与变量中存储的完全不同的整数。

$sql_query = "INSERT INTO users_info (steam64) VALUES ('$steam64')";

var_dump($steam64); 返回真正的 int,回显它也是如此。不太清楚这里发生了什么,感谢任何帮助。

【问题讨论】:

  • 插入了什么(以及转储了什么)以及的列类型是什么?这可能不是 MySQL 中的“错误”,这意味着问题出在其他地方......
  • 整数上不需要单引号。它可能会尝试将字符串 '$steam64' 作为整数插入,并在此过程中进行转换。
  • @pst 2147483647 正在插入,76561197989628470 正在转储,列类型为 int(255)。
  • @Lazerblade 只是拥有它VALUES ($steam64) 仍然插入错误的 int。

标签: php mysql insert steam-web-api


【解决方案1】:

基于您对“价值被倾销”的评论;您尝试插入的数字对于 32 位系统来说太大了。 32 位的最大值为 4,294,967,295,64 位的最大值为 18,446,744,073,709,551,615。我建议将您的列转换为 varchar(100) 哈希而不是 int,或者切换到 64 位系统。 很棒的文章关于最大整数 herehere


另外,在我被激怒之前,请务必阅读SQL injection,以防您不清理直接发布到 sql 语句中的变量。

【讨论】:

  • 已发布更新。您尝试插入的数字太大。
  • 谢谢 :) 是 PHP 还是 MySQL 有限制?
  • 这是一个系统限制,因此任何试图访问这么大数字的应用都会导致意外行为。
  • 好吧,快速提问,如果我想要一个带有类似于 76561197980000000 的变量的 for 循环,这可能吗?
  • 可以,只要不是 int。
【解决方案2】:

2147483647 是 mysql 的最大 int 值。只需将类型从 int 更改为 bigint。

【讨论】:

  • 值得注意的是,BIGINT 的限制为 -9223372036854775808 到 9223372036854775807(有符号)或 0 到 18446744073709551615(无符号)。如果您想要最大的 POSITIVE ONLY 整数,请使用 COLUMNNAME BIGINT(32) UNSIGNED DEFAULT 0
【解决方案3】:
CREATE TABLE `dvouchers` (
  `2147483647` int(3) NOT NULL auto_increment,
  `code` varchar(12) NOT NULL default '1',
  `type` char(1) NOT NULL default '$',
  `count` int(3) unsigned NOT NULL default '0',
  `amount` int(3) unsigned default '0',
  `notes` text,
  `expiryDate` date default NULL,
  `fkUserAdminId` int(11) NOT NULL default '0',
  PRIMARY KEY  (`2147483647`),
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

【讨论】:

  • hmm ... 这回答了这个问题,因为 ... ?
  • 这毫无意义,如果您遇到此问题,请不要试图从这个答案中推断出任何帮助。
【解决方案4】:

转到操作-> 表选项-> 将增量值更改为最小值或您想要增量的任何值..

自动增量的大问题是如果它的值非常大则错误地从最后一个条目开始,然后在插入值中开始问题.. 使用我们预定义的数据类型

【讨论】:

    【解决方案5】:

    整数类型INT是4Bytes存储,你从-2^(4*8-1)=-21474836482^(4*8-1)-1=2147483647,当你有“signed”标志时,如果你把标志改为未签名您将拥有从 02^(4*8)-1 的范围。 MySQL 支持 BIGINT 为 8Bytes 存储。如果您尝试保存更大的值,您将保存范围的最大值

    【讨论】:

      【解决方案6】:

      最简单的方法是将 MySQL 的“int”更改为“varchar”。

      【讨论】:

      • 不要这样做。永远不要这样做。 VARCHAR 是一种字符串表示形式,而不是数字表示形式。不可能对字符串进行数学运算。
      【解决方案7】:

      当我在玩 SQL 时,MySQL 遇到了同样的问题 MySQL int 数据类型。 将数据类型从 int 修改为 bigint 已修复问题。

      MySQL Integer Types http://dev.mysql.com/doc/refman/5.7/en/integer-types.html

      ALTER TABLE tablename MODIFY columnname BIGINT; 
      

      【讨论】:

        【解决方案8】:

        同意将数据类型从 INTEGER 更改为 BIGINT。目前正在使用 node.js/sequelize 构建一个 Web 应用程序,以下重构解决了从 react-redux 表单操作到“2147483647”的电话号码帖子:

        clientPhone: {
            type: DataTypes.BIGINT,
            allowNull: true
        },
        

        【讨论】:

          【解决方案9】:

          数据类型 INT 的最大值是 2147483647。如果您插入的数字大于 2147483647,则会导致问题。 对于解决方案,将数据类型从 INT 更改为 BIGINT,因为 BIGINT 的最大值为 9223372036854775807,它可能会解决您的问题。 看看这个网站: https://dev.mysql.com/doc/refman/5.7/en/integer-types.html

          【讨论】:

            【解决方案10】:

            只需将数据类型从 INT 更改为 BIGINT

            【讨论】:

              猜你喜欢
              • 2012-05-02
              • 2019-06-20
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2023-04-01
              • 2019-05-18
              相关资源
              最近更新 更多