Hallo,
das Problem tritt natürlich nur auf, wenn die Datenbank UTF-8 benutzt, z.B.
NLS_CHARACTERSET = 'AL32UTF8'
2013-01-29T10:46:13
MuffiVARCHAR2(2000) in Oracle heisst 2000 Bytes, nicht 2000 Zeichen.
Zumindest in neueren Versionen hängt das von der Einstellung
NLS_LENGTH_SEMANTICS ab. Die möglichen Werte sind
CHAR und
BYTE.
Prüfe:
SELECT * FROM NLS_DATABASE_PARAMETERS;
Das kann ansonsten (also unabhängig von der obigen globalen Einstellung) auch per Spalte eingestellt werden:
CREATE TABLE [tablename] ([columname] VARCHAR2(2000 CHAR) [, ...]);
Oder man stellt dem DDL-Script voran:
ALTER SESSION SET NLS_LENGTH_SEMANTICS = 'CHAR';
Und schließlich kann man die Einstellung auch per Spalte modifizieren:
ALTER TABLE [tablename] MODIFY [columname] VARCHAR2(2000 CHAR);
Hiernach kannst Du 2000 Umlaute oder auch kyrillischen oder chinesischen Text in die Spalte schreiben.
Auch wenn der Kunde den Daumen drauf hat: Diese Änderung sollte gemacht (veranlasst) werden. Wenn in einer UTF-8-codierten Datenbank CHAR- oder VARCHAR-Spalten enthalten sind, die potentiell mehrbytige Zeichen enthalten können, ist es eindeutig ein Designfehler, wenn sie
NLS_LENGTH_SEMANTICS = 'BYTE' haben.
Grüße
payx
Last edited: 2013-01-30 11:26:21 +0100 (CET)