2014-10-03 68 views
0

根据我在这里和网上阅读的内容,如果您尝试存储>INT's maximum signed value; 2147483647的整数,则会出现此错误。如下所示,我使用bigint(20)作为user_id。所以,我不知道为什么我得到这个错误。重复键'2147483647''PRIMARY'

CREATE TABLE IF NOT EXISTS `users` (
    `user_id` bigint(20) unsigned NOT NULL, 
    `screen_name` varchar(20) NOT NULL, 
    `name` varchar(20) DEFAULT NULL, 
    `profile_image_url` varchar(200) DEFAULT NULL, 
    `created_at` datetime NOT NULL, 
    `followers_count` int(10) unsigned DEFAULT NULL, 
    `friends_count` int(10) unsigned DEFAULT NULL, 
    `statuses_count` int(10) unsigned DEFAULT NULL, 
    `last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
    PRIMARY KEY (`user_id`), 
    KEY `user_name` (`name`), 
    KEY `last_update` (`last_update`), 
    KEY `screen_name` (`screen_name`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8; 

PHP脚本来处理插入:

/* Prepare an insert statement */ 
$query = "INSERT INTO users (user_id, screen_name, name, profile_image_url, created_at, followers_count, friends_count, statuses_count) VALUES (?,?,?,?,?,?,?,?)"; 
$stmt = $mysqli->prepare($query); 
$stmt->bind_param("issssiii", $user_id, $screen_name, $name, $profile_image_url, $created_at, $followers_count, $friends_count, $statuses_count); 
/* Execute the statement */ 
$stmt->execute() 

FYI:这个脚本&表是存放一些Twitter的用户数据的目的

+0

只是为了仔细检查,做'DESCRIBE users'显示user_id作为bigint吗? – Mike 2014-10-03 20:20:50

+1

还要确保该值绝对不存在。尝试插入一个稍大的值。 – 2014-10-03 20:22:05

+0

@Mike是的。确切地说'bigint(20)unsigned'。 – iTurki 2014-10-03 20:22:08

回答

2

INT有一个最大的带符号值2147483647.大于该值的任何数字将被截断为该值。你需要做的是将该列更改为user_id varchar(20)unsigned NOT NULL,它将保存最多20个字符的字符串,因为卡片号码是字符串,而不是实际的数字(不要与数字做数学运算)。你也应该删除AUTO_INCREMENT,因为这不是你将会增加的值。