Oracle Einfügen in NVarchar2 (4000) erlaubt keine 4000 Zeichen?

8

Ich habe eine Tabelle mit einem Felddatentyp von NVarchar2 (4000) Ich verschiebe Daten von einem SQL Server zu einem Oracle Server. Der SQL Server-Datentyp ist auch nvarchar (4000). Ich habe die MAX-Größe dieses Feldes auf der SQL-Server-Seite überprüft, und der MAX ist 3996, was 4 Zeichen unter dem Limit von 4000 liegt.

Wenn ich versuche, diese Daten in Oracle einzufügen, erhalte ich aufgrund der Größe einen Fehler "LONG".

Was passiert hier, wird das Oracle NVarchar2 (4000) 4000 Zeichen nicht erlauben? Wenn nicht, wo ist die Grenze oder wie kann ich das umgehen?

    
Bruce Pullum 22.08.2014, 17:36
quelle

3 Antworten

7

Es gibt ein Limit von 4000 Bytes, nicht 4000 Zeichen. So würde NVARCHAR2 (4000) mit einem nationalen AL6UTF16-Zeichensatz die maximalen 4000 Byte belegen.

Aus der Oracle-Dokumentation von MAX_STRING SIZE :

  

Tabellen mit virtuellen Spalten werden mit einem neuen Datentyp aktualisiert   Metadaten für virtuelle Spalten von VARCHAR2 (4000), 4000-Byte NVARCHAR2,   oder RAW (2000) type.

Lösung: -

Auch wenn Sie 4000 Zeichen speichern möchten, würde ich Ihnen empfehlen, CLOB zu verwenden

  

Ein CLOB (Character Large Object) ist ein Oracle-Datentyp, der gehalten werden kann   bis zu 4 GB Daten. CLOBs sind praktisch zum Speichern von Text.

Sie können versuchen, den Spaltendatentyp in CLOB zu ändern:

%Vor%     
Rahul Tripathi 22.08.2014, 17:40
quelle
3

Erstens, wie andere bereits erwähnt haben, sind die Datentypen varchar2 und nvarchar2 in SQL auf 4000 Bytes beschränkt, es sei denn, Sie verwenden 12.1. In PL / SQL sind sie auf 32767 begrenzt. In 12.1 können Sie das SQL-Limit auf 32767 erhöhen, indem Sie MAX_STRING_SIZE -Parameter .

Zweitens: Wenn Sie nicht mit einer Legacy-Datenbank arbeiten, die einen Nicht-Unicode-Zeichensatz verwendet, der nicht für die Verwendung eines Unicode-Zeichensatzes aufgerüstet werden kann, sollten Sie die Datentypen nvarchar2 und nchar in Oracle vermeiden. In SQL Server verwenden Sie nvarchar , wenn Sie Unicode-Daten speichern möchten. In Oracle verwenden Sie varchar2 in einer Datenbank, deren Zeichensatz Unicode unterstützt (in der Regel AL32UTF8 ), wenn Sie Unicode-Daten speichern möchten.

Wenn Sie Unicode-Daten in einer Oracle NVARCHAR2 -Spalte speichern, wird der nationale Zeichensatz verwendet - das ist mit ziemlicher Sicherheit AL16UTF16 , was bedeutet, dass jedes Zeichen mindestens 2 Byte Speicherplatz benötigt. Ein NVARCHAR2(4000) kann daher wahrscheinlich nicht mehr als 2000 Zeichen speichern. Wenn Sie eine VARCHAR2 -Spalte verwenden, können Sie andererseits einen Unicode-Zeichensatz mit variabler Breite ( AL32UTF8 ) verwenden. In diesem Fall benötigen englische Zeichen im Allgemeinen nur 1 Byte, die meisten europäischen Zeichen benötigen 2 Byte und die meisten asiatischen Zeichen benötigen 3 Bytes (das ist natürlich nur eine Verallgemeinerung). Dadurch können Sie wesentlich mehr Daten in einer Spalte VARCHAR2 speichern.

Wenn Sie mehr als 4000 Byte Daten speichern müssen und Sie Oracle 11.2 oder höher verwenden, müssen Sie den Datentyp LOB ( CLOB oder NCLOB ) verwenden.

    
Justin Cave 22.08.2014 17:54
quelle
0

Gemäß der Dokumentation , obwohl sich die Breite auf die Nummer bezieht von Zeichen gibt es immer noch ein 4.000-Byte-Limit:

  

Die Breitenangaben des Zeichentyps NVARCHAR2 beziehen sich auf die Anzahl der Zeichen. Die maximal zulässige Spaltengröße beträgt 4000 Byte.

Sie haben wahrscheinlich 4 Multi-Byte-Zeichen.

    
Ben 22.08.2014 17:40
quelle

Tags und Links