错误1062(23000):重复录入

时间:2017-06-25 22:43:03

标签: mysql mariadb

我正在尝试将数据从Oracle表迁移到MariaDB表。我有来自Oracle表卸载的csv文件和一个加载脚本,用于将这些文件加载​​到我使用与Oracle端相同的表/模式定义创建的相应的mariadb表中。我收到1062(230000)重复输入错误但是我不明白为什么MySQL / Mariadb将数据视为唯一?插入的第一个记录中的值是小写,而第二个插入失败的值是大写。似乎mysql和mariadb都将值视为相同,因此我得到主键的Duplicate entry错误。为了显示我的错误,我创建了一个测试表并手动尝试插入2行。我已将所有相关信息放在下面,如果有一些解释,我将不胜感激。在此先感谢您的帮助。

MariaDB [mytestdb]>  create table test1 (id char(15) not null, recnum integer, primary key(id));

MariaDB [mytestdb]> show create table test1\G
*************************** 1. row ***************************
       Table: test1
Create Table: CREATE TABLE `test1` (
  `id` char(15) NOT NULL,
  `recnum` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1

MariaDB [mytestdb]> insert into test1 values ('abc123',1);
Query OK, 1 row affected (0.01 sec)

MariaDB [mytestdb]> insert into test1 values ('ABC123',2);
ERROR 1062 (23000): Duplicate entry 'ABC123' for key 'PRIMARY'

谢谢, 桑杰

1 个答案:

答案 0 :(得分:0)

默认情况下,MySQL不区分大小写。您应该使用适合数据类型的COLLATION选项(* _cs)之一定义列,如果不存在,则定义_bin排序规则。或者,如果所有其他方法都失败(例如,您的数据类型的_cs或_bin排序规则不存在),则可能需要将列设置为BINARY字符集。

作为起点,https://dev.mysql.com/doc/refman/5.7/en/charset-mysql.html可能有用。