Ihr Datenwert hat nur 99 Zeichen, aber es scheint, einige sind multibyte characters - von einem Kommentar mindestens eins ist das Symbol .
Es gibt zwei verwandte Möglichkeiten, dieses Verhalten zu sehen, abhängig davon, wie Ihre Tabelle definiert ist und was in Ihrer Steuerdatei enthalten ist.
Sie sehen wahrscheinlich den Effekt von character length semantics. Ihre Spalte ist definiert als 100 Bytes; Sie versuchen, 99 Zeichen einzufügen, aber da einige Zeichen mehrere Bytes für den Speicher benötigen, ist die Gesamtzahl der für Ihre Zeichenfolge erforderlichen Bytes 101 - zu viele für die Spaltendefinition.
Sie hier diesen Effekt sehen:
create table t42 (str varchar2(10 byte));
Dann, wenn ich eine Datendatei mit einer Zeile, die einen Multibyte-Charakter hat:
This is 10
This is 9½
und eine einfache Steuerdatei:
LOAD DATA
CHARACTERSET UTF8
TRUNCATE INTO TABLE T42
FIELDS TERMINATED BY ','
TRAILING NULLCOLS
(
STR
)
Dann versucht zu laden, dass bekommt:
Record 2: Rejected - Error on table T42, column STR.
ORA-12899: value too large for column "MYSCHEMA"."T42"."STR" (actual: 11, maximum: 10)
Total logical records read: 2
Total logical records rejected: 1
Wenn ich meine Tabelle mit Charakter Semantik neu:
drop table t42 Entlüfter; create table t42 (str varchar2 (10 char));
dann mit der gleichen Daten und Steuerdatei geladen wird jetzt keine Fehler, und:
Total logical records read: 2
Total logical records rejected: 0
Wenn jedoch auch die Tabelle mit Zeichen Semantik definiert ist, können Sie immer noch die sehen können; wenn ich die Linie CHARACTERSET UTF8
dann meine Umgebung Standardwerte (über NLS_LANG, die meinen Charakter zu WE8ISO8859P1 gesetzt setzen geschieht) entfernen führt zu einem Zeichensatz Mismatch und ich wieder sehen:
Record 2: Rejected - Error on table T42, column STR.
ORA-12899: value too large for column "STACKOVERFLOW"."T42"."STR" (actual: 11, maximum: 10)
(Ohne diese Steuerdatei Leitung und Bei Bytesemantik für die Spalte gibt der Fehler die tatsächliche Länge als 13 nicht 11) an.
So müssen Sie die Tabelle definiert werden, um die maximale Anzahl von Zeichen halten Sie erwarten, und Sie die Steuerdatei müssen den Zeichensatz angeben, ob Ihr NLS_LANG es um etwas in Verzug, die nicht übereinstimmt der Datenbankzeichensatz.
Sie die Standard-Semantik eine neue Tabelle für die Datenbank Standard und die aktuelle Sitzung Standard durch Abfragen, erhalten sehen:
select value from nls_database_parameters where parameter = 'NLS_LENGTH_SEMANTICS';
select value from nls_session_parameters where parameter = 'NLS_LENGTH_SEMANTICS';
Für eine vorhandene Tabelle können Sie überprüfen, die von der Suche verwendet wurde an der user_tab_columns.char_used
Spalte, die B für Byte-Semantik und C für Zeichensemantik sein wird.
Gibt es Multibyte-Zeichen in der Zeichenfolge, und die Spalte wird als 100 Byte statt 100 Zeichen definiert? Andernfalls müssten Sie uns die Daten zeigen. –
½ ist das ein Multibyte-Charakter? Ich fand diesen Char auf abgelehnten Aufzeichnungen. Können Sie sich ausführlich mit Multibyte-Charakteren beschäftigen? – Joe1