In der Oracle-Dokumentation wird oft davon geredet, dass der Datentyp
»CHAR
«
die Länge 2000 Zeichen hat und
»VARCHAR2
«
4000 Zeichen fasst. Das ist aber nicht richtig, denn die maximale Länge wird in Byte gerechnet, das heißt ein
»VARCHAR2
«
-Feld kann maximal 4000 Byte lang werden.
CREATE TABLE status ( statusid CHAR(1 CHAR), beschreibung VARCHAR2(4000 CHAR));
In diesem Fall ist also die Längensemantik falsch, da das Feld
»BESCHREIBUNG
«
tatsächlich nur 4000 Byte lang sein kann (trotzdem lässt Oracle die unter Umständen irreführende Definition zu). Wenn jetzt dieses Feld bis zum letzten Zeichen gefüllt ist und Umlaute oder Sonderzeichen enthält, die im Unicode länger als ein Byte sind, dann muss die Konvertierung fehlschlagen. Stattdessen muss der Anwender den Datentyp in
»LONG
«
oder besser
»CLOB
«
ändern. Die Definition der Tabelle sieht dann für das obige Beispiel so aus:
CREATE TABLE status ( statusid CHAR(1 CHAR), beschreibung CLOB) LOB (beschreibung) STORE AS ( ENABLE STORAGE IN ROW);
Wenn in der Datenbank nur gelegentlich spezielle Zeichen, wie Arabisch oder Kanji abzuspeichern sind, kann man auch die sogenannten National Language Datentypen (
»NCHAR
«
,
»NVARCHAR2
«
oder
»NCLOB
«
) benutzen. Durch die generelle Umstellung der Datenbank auf Unicode entfällt diese Notwendigkeit und die
»N
«
-Datentypen lassem sich wieder in "normale" Datentypen umwandeln. Dafür passt man einfach den
»CREATE
«
-Befehls der entsprechenden Tabelle an.