【发布时间】:2020-02-02 11:39:59
【问题描述】:
我每天都会收到带有 CSV 文件的电子邮件,并且有代码可以自动将文件上传到我的服务器,然后根据 CSV 文件中第 1 行的数据创建一个列名的 MySQL 表。在创建表之后,该脚本旨在将 100 左右的下一行记录导入表中,其中“调查 ID”列是一个唯一值,也用作我的主键。 除了“调查 ID”之外的所有其他列都是 text(999),没有其他列充当主要、唯一、自动增量等。
现在的问题是每次导入记录时,脚本都会向我抛出以下错误:
错误:将第 2 行写入表时出错。 [复制 键 'PRIMARY' 的条目 '2147483647']
第一条记录可以正常导入,但所有后续记录都无法导入并引用相同的错误和相同的“2147483647”键,即第一条记录的调查 ID。每条记录在文件中都有一个唯一的“调查 ID”编号,我可以看到每条记录的“插入”显示一个唯一的 ID,因此出现错误的唯一原因必须来自表/列配置。
由于一切都是由脚本自动完成的,因此一旦创建列标题以将“调查 ID”分配为主并设置我需要的结构,我就会运行以下查询。
$sql = "ALTER TABLE `" . $temp_table . "` CHANGE `Survey ID` `Survey ID` INT(11) NULL";
if(!$result = $db->query($sql)){ die('Error while changing Survey ID to INTEGER [' . $db->error . ']'); }
$sql = "ALTER TABLE `" . $temp_table . "` ADD PRIMARY KEY(`Survey ID`)";
if(!$result = $db->query($sql)){ die('Error setting Survey ID as PRIMARY [' . $db->error . ']'); }
$sql = "ALTER TABLE `". $temp_table . "` CHANGE `Survey ID` `Survey ID` INT(11) NOT NULL AUTO_INCREMENT";
if(!$result = $db->query($sql)){ die('Error while changing Survey ID to INTEGER [' . $db->error . ']'); }
$sql = "ALTER TABLE `". $temp_table . "` ADD UNIQUE(`Survey ID`);";
if(!$result = $db->query($sql)){ die('Error setting Survey ID as UNIQUE [' . $db->error . ']'); }
我花了几个小时玩弄 NULL、NOT NULL、AUTO_INCREMENT、UNIQUE、PRIMARY 等,但都无济于事,错误仍然存在。
如果有人有任何指导,谢谢。
【问题讨论】:
-
2147483647是signed int 的最大值。您可能已达到最大条目数 -
使用
BIGINT而不是INT,这可能对你有帮助