奇怪的问题我似乎无法理解。我在MySQL数据库中有一个表,其结构如下......
CREATE TABLE IF NOT EXISTS `tblbaseprices` (
`base_id` bigint(11) NOT NULL auto_increment,
`base_size` int(10) NOT NULL default '0',
`base_label` varchar(250) default NULL,
`base_price_1a` float default NULL,
`base_price_2a` float default NULL,
`base_price_3a` float default NULL,
`base_price_1b` float default NULL,
`base_price_2b` float default NULL,
`base_price_3b` float default NULL,
`site_id` int(11) default NULL,
PRIMARY KEY (`base_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=134 ;
我在那里的最后一个base_id是132.我假设有几条记录被删除,auto_increment设置为134,你可以看到。我试图运行以下SQL语句,当我这样做时,我得到错误“重复条目'2147483647'为密钥1”。
INSERT INTO tblbaseprices (site_id, base_size, base_price_1a, base_price_2a, base_price_3a, base_price_4a) VALUES ('', '', '', '', '', '')
有人有什么想法吗?
非常感谢!
答案 0 :(得分:15)
2^31 − 1 = 2,147,483,647
The number 2,147,483,647 is ... the maximum value for a 32-bit signed integer in computing
答案 1 :(得分:4)
使用您的代码我收到此错误 - “字段列表”中的未知列'base_price_4a'。 这意味着您正在尝试插入另一个表(可能在另一个模式中),并且该表具有主键INT和AUTO_INCREMENT = 2147483647.。
答案 2 :(得分:4)
2147483647是mysql的最大int值。只需将类型从int更改为bigint。
答案 3 :(得分:2)
您已达到32位整数限制,从而阻止自动增量递增。将您的pk切换为具有更高列长度的bigint应该可以解决问题。
另外,如果你的PK永远不会是负数,那么切换到unsigned int会给你更多的空间。
答案 4 :(得分:2)
尝试将auto_increment列更改为bigint而不是int,然后最大值为'9223372036854775807'或甚至'18446744073709551615'如果使其无符号(无值低于0)。
将Auto_Increment更改为列中的最后一个ID,以便从中断处继续。
请确保不删除auto_increment,否则会继续产生错误。
答案 5 :(得分:1)
您将空字符串插入数字列。据我所知,您还要插入模式中不存在的列。我的猜测是这与你的错误有关。
答案 6 :(得分:1)
签名和未签名的问题
alter table tblbaseprices
modify column site_id int(10) unsigned NOT NULL;
参考 - http://dev.mysql.com/doc/refman/5.0/en/numeric-type-overview.html
site_id
)int(11)
,最大可能是int(10)
答案 7 :(得分:0)
今天我收到错误duplicate key 2147483647
我认为当我尝试从PhpMyAdmin向数据库中插入记录时出现了,在输入时,我也尝试输入键值,它比当前Next autoindex
还要低或者我尝试输入内容例如99999999999999
作为关键字段,这导致它将Next autoindex
设置为最大值
无论如何,导致erorr是因为该表的Next autoindex
为2147483647
。
我的表是空的,所以我通过这个查询修复了它:
ALTER TABLE table_name AUTO_INCREMENT = 0
如果您的表中包含数据,请将0
替换为您的最大键加1
答案 8 :(得分:0)
这是一个数据库问题。检查你的phpmyadmin>你的数据库>结构,你的主键应该在“bigint”中设置,而不仅仅是“int”
答案 9 :(得分:0)
CREATE TABLE IF NOT EXISTS `tblbaseprices` (
`base_id` bigint(11) NOT NULL auto_increment,
`base_size` int(10) NOT NULL default '0',
`base_label` varchar(250) default NULL,
`base_price_1a` float default NULL,
`base_price_2a` float default NULL,
`base_price_3a` float default NULL,
`base_price_1b` float default NULL,
`base_price_2b` float default NULL,
`base_price_3b` float default NULL,
`site_id` int(11) default NULL,
PRIMARY KEY (`base_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=134 ;
答案 10 :(得分:0)
本质上,您试图插入一个大于INT支持的最大大小的值,该值实际上是错误中提供给您的数字。
如果要导入数据,则字段之一的值大于INT大小。您还可以将表修改为BIGINT,这样也可以解决该问题(当然,这要付出额外的磁盘空间)。
一个常见的原因是您正在使用一些生成大数/随机数的脚本。您应该添加一些检查以确保大小等于或小于最大最大INT大小2147483647,并且一切都会好起来的。
答案 11 :(得分:-1)
重复'app_user'的重复条目'57147-2147483647'[INSERT INTO user_lookup
user_id
,app_id
,app_user_id
,special_offers
,{{ 1}})VALUES('2426569','57147','4009116545',1,1854489853)]