键'PRIMARY'重复输入'2147483647'

时间:2014-10-03 20:19:22

标签: php mysql

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

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()

仅供参考:此脚本的目的&表是存储一些Twitter的用户数据

1 个答案:

答案 0 :(得分:2)

INT的最大签名值为2147483647.任何大于该值的数字都将被截断为该值。您需要做的是将该列更改为user_id varchar(20)无符号NOT NULL,它将包含最多20个字符的字符串,因为卡号是字符串而不是实际数字(您不做数学)随着)。您还应该删除AUTO_INCREMENT,因为这不是您将要递增的值。