尝试导入转储时出现重复输入错误

时间:2012-09-03 13:05:16

标签: mysql sql mysqldump

我在服务器上有以下表格:

CREATE TABLE routes (
  id          int(11) unsigned NOT NULL AUTO_INCREMENT,
  from_lat    double NOT NULL,
  from_lng    double NOT NULL,
  to_lat      double NOT NULL,
  to_lng      double NOT NULL,
  distance    int(11) unsigned NOT NULL,
  drive_time  int(11) unsigned NOT NULL,

  PRIMARY KEY (id),
  UNIQUE KEY route (from_lat,from_lng,to_lat,to_lng)
) ENGINE=InnoDB;

我们正在将一些路由信息从A点(from_lat,from_lng)保存到B点(to_lat,to_lng)。坐标上有一个唯一的索引。

但是,数据库中有两个条目让我感到困惑:

+----+----------+----------+---------+---------+----------+------------+
| id | from_lat | from_lng | to_lat  | to_lng  | distance | drive_time |
+----+----------+----------+---------+---------+----------+------------+
| 27 | 52.5333  | 13.1667  | 52.5833 | 13.2833 | 13647    | 1125       |
| 28 | 52.5333  | 13.1667  | 52.5833 | 13.2833 | 13647    | 1125       |
+----+----------+----------+---------+---------+----------+------------+

它们完全相同。

当我不尝试使用mysqldump导出数据库并尝试重新导入时,我收到错误:

ERROR 1062 (23000): Duplicate entry '52.5333-13.1667-52.5833-13.2833' for key 'route'

当数据库中存在唯一键时,它是如何存在的? MySQL不应该拒绝它们吗?

1 个答案:

答案 0 :(得分:2)

双值是否可能略有不同,但仅在第4位之后?
如果您导出和导入它们,它们将是相同的,这将导致唯一的约束违规。

引自this MySQL bug report

  

当mysqldump转储DOUBLE值时,它使用的精度不足   区分一些接近的价值(并且,可能是不充分的   精度从原始数据库重新创建确切的值)。如果   DOUBLE值是主键或唯一索引的一部分,还原   此输出中的数据库因重复键错误而失败。

尝试使用逗号后面的更多数字显示它们(具体取决于您的客户端。)