2017-06-25 5 views
0

Ich versuche, Daten von Oracle-Tabelle auf MariaDB-Tabelle zu migrieren. Ich habe CSV-Dateien aus der Oracle-Tabelle entladen und ein Lade-Skript, um diese Dateien in die entsprechenden Mariadb-Tabellen, die ich mit der gleichen Tabelle/Schemadefinition erstellt, wie es in Oracle-Seite ist zu laden. Ich erhalte den 1062 (230000) Duplicate-Eintragsfehler, aber ich verstehe nicht, warum MySQL/Mariadb die Daten als einmalig behandelt? Der Wert im ersten Satz, der eingefügt wird, ist in Kleinbuchstaben und im zweiten Satz, der fehlschlägt, wird in Großbuchstaben geschrieben. Es scheint, dass sowohl mysql als auch mariadb den Wert gleich behandeln und daher bekomme ich den doppelten Eingabefehler für den Primärschlüssel. Um meinen Fehler anzuzeigen, habe ich eine Testtabelle erstellt und manuell versucht, 2 Zeilen einzufügen. Ich habe alle relevanten Informationen unten aufgeführt und würde mich freuen, wenn es eine Erklärung gibt. Vielen Dank im Voraus für Ihre Hilfe.Fehler 1062 (23000): Doppeleintrag

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' 

Danke, Sanjay

Antwort

0

MySQL ist standardmäßig nicht zwischen Groß- und Klein. Sie sollten die Spalte mit einer der COLLATION-Optionen (* _cs) definieren, die für den Datentyp geeignet sind, oder, falls keine vorhanden ist, die _bin-Sortierung. Oder, falls alles andere fehlschlägt (zB die _cs oder _bin Kollatierungen für Ihren Datentyp existieren nicht), müssen Sie die Spalte stattdessen auf BINARY charset setzen.

Als Ausgangspunkt könnte https://dev.mysql.com/doc/refman/5.7/en/charset-mysql.html nützlich sein.

+0

Jon, danke für Ihre Antwort. Ich habe versucht, die Latin1_bin für COLLATE-Wert und das funktionierte in meiner Testtabelle. Ich konnte die 2 Zeilen in meinem Beispiel einfügen. Ich werde es am realen Tisch ausprobieren, da ich zuversichtlich bin, dass es funktionieren wird. Danke und Grüße, Sanjay – Sanjay

+0

Keine Sorgen! Denken Sie daran, dass Sie dies getan haben, wenn Sie Abfragen mit Joins für diese Spalte starten: Sie müssen sicherstellen, dass der Zeichensatz und die Sortierung übereinstimmen, oder manchmal verwirft MySQL den Index und führt nur einen vollständigen Tabellenscan durch. –

Verwandte Themen