Über den Parameter „NLS_LENGTH_SEMANTICS“ wird das Verhalten der Datenbank beim Anlegen von varchar2 Spalten definiert.
Der Default Wert ist „BYTE“ , das heißt beim Anlegen einer Varchar2 Spalte wird für die Längen Angabe der Spalte die Anzahl der Bytes verwendet.
Das heißt aus der DDL Angabe „varchar2(10)“ wird eine Spalte mit dem Datentyp VARCHAR2 und der Byte Längen Angabe („data_length“ in der dba_tab_columns ) von 10 erstellt. Der sqlplus „describe“ Befehl zeigt als Zusatz zum Datentyp nichts, damit ist diese Spalte mit Byte definiert.
Steht der Wert auf „CHAR“, wird die Varchar2 Spalte mit der Länge angelegt, die notwendig ist die Anzahl von Zeichen beim eingestellten Zeichensatz der DB zu speichern.
Das heißt aus der DDL Angabe „varchar2(10)“ wird eine Spalte mit dem Datentyp VARCHAR2 und der Byte Längen Angabe („data_length“ in der dba_tab_columns ) von 40 erstellt. Der sqlplus „describe“ Befehl zeigt als Zusatz zum Datentyp nichts an, damit ist diese Spalte mit Byte definiert.
NLS_LENGTH_SEMANTICS kann global oder auf Session ebene gesetzt werden.
Einschränkung:
Setzen auf CHAR auf Session Ebene:
SQL>ALTER SESSION SET NLS_LENGTH_SEMANTICS=CHAR; SQL>CREATE TABLE gt ( a varchar2(10)); SQL>DESC gt Name NULL? TYPE -------- -------- ----------------- A VARCHAR2(10) SQL>SELECT data_type,data_length FROM user_tab_columns WHERE TABLE_NAME ='GT'; DATA_TYPE DATA_LENGTH ----------- ----------- VARCHAR2 40
Setzen auf BYTE auf Session Ebene:
SQL>ALTER SESSION SET NLS_LENGTH_SEMANTICS=BYTE; SQL>CREATE TABLE gt ( a varchar2(10)); SQL>DESC gt Name NULL? TYPE -------- -------- ----------------- A VARCHAR2(10) SQL>SELECT data_type,data_length FROM user_tab_columns WHERE TABLE_NAME ='GT'; DATA_TYPE DATA_LENGTH ----------- ----------- VARCHAR2 10
Beim Import eines Datenbank Schemas aus einer WE8ISO Datenbank in die neue Unicode Umgebung wird folgender Fehler geworfen:
ORA-02374: conversion error loading table "GPITEST"."ILOCDB02" ORA-12899: value too large for column STICHWORT (actual: 14, maximum: 12) ORA-02372: data for row: STICHWORT : 'Lösungsworte'
Lösung: Schema wieder löschen, setzen von NLS_LENGTH_SEMANTICS auf CHAR, neu importieren