我正在尝试将数据从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'
谢谢, 桑杰
答案 0 :(得分:0)
默认情况下,MySQL不区分大小写。您应该使用适合数据类型的COLLATION选项(* _cs)之一定义列,如果不存在,则定义_bin排序规则。或者,如果所有其他方法都失败(例如,您的数据类型的_cs或_bin排序规则不存在),则可能需要将列设置为BINARY字符集。
作为起点,https://dev.mysql.com/doc/refman/5.7/en/charset-mysql.html可能有用。