47

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

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

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

4

10 回答 10

69

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

于 2013-07-22T08:49:50.107 回答
42

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


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

于 2012-04-21T02:52:45.440 回答
11

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

MySQL 整数类型 http://dev.mysql.com/doc/refman/5.7/en/integer-types.html

ALTER TABLE tablename MODIFY columnname BIGINT; 
于 2016-08-03T19:10:09.927 回答
8

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

于 2018-03-29T04:54:31.853 回答
7

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

于 2017-06-30T02:13:15.160 回答
5

整数类型INT是 4Bytes 存储,你从-2^(4*8-1)=-2147483648to得到2^(4*8-1)-1=2147483647,当你有“签名”标志时,如果你将标志更改为无符号你将有一个范围 from 0to 2^(4*8)-1。MySQL 支持 BIGINT 为 8Bytes 存储。如果您尝试保存更大的值,您将保存范围的最大值

于 2015-08-25T18:57:24.420 回答
1

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

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

于 2015-08-04T13:10:07.147 回答
1

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

clientPhone: {
    type: DataTypes.BIGINT,
    allowNull: true
},
于 2017-06-06T23:54:43.940 回答
-5
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;
于 2013-08-10T06:55:48.763 回答
-5

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

于 2016-02-19T16:58:56.563 回答