Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Unterschied zwischen NLS_NCHAR_CHARACTERSET und NLS_CHARACTERSET für Oracle

Im Allgemeinen sind alle Ihre Punkte richtig. NLS_NCHAR_CHARACTERSET definiert den Zeichensatz für NVARCHAR2 , usw. Al. Spalten, während NLS_CHARACTERSET wird für VARCHAR2 verwendet .

Warum ist es möglich, dass Sie chinesische Schriftzeichen mit US7ASCII sehen ?

Der Grund dafür ist Ihr Datenbank-Zeichensatz und Ihr Client-Zeichensatz (d.h. siehe NLS_LANG Wert) sind beide US7ASCII . Ihre Datenbank verwendet US7ASCII und es "denkt" auch, dass der Client Daten mit US7ASCII sendet . Es findet also keine Konvertierung der Strings statt, die Daten werden bitweise vom Client zum Server und umgekehrt übertragen.

Dadurch können Sie Zeichen verwenden, die von US7ASCII eigentlich nicht unterstützt werden . Seien Sie sich bewusst, falls Ihr Client einen anderen Zeichensatz verwendet (z. B. wenn Sie ODP.NET Managed Driver in einer Windows-Anwendung verwenden), werden die Daten Müll sein! Auch wenn Sie eine Migration des Datenbankzeichensatzes in Betracht ziehen, haben Sie das gleiche Problem.

Noch eine Anmerkung:Ich glaube nicht, dass Sie das gleiche Verhalten mit anderen Zeichensätzen bekommen würden, z. wenn sowohl Ihre Datenbank als auch Ihr Client WE8ISO8859P1 verwenden würden zum Beispiel. Beachten Sie auch, dass Sie tatsächlich eine falsche Konfiguration haben. Ihre Datenbank verwendet den Zeichensatz US7ASCII , Ihr NLS_LANG Wert ist auch US7ASCII (höchstwahrscheinlich ist es überhaupt nicht gesetzt und Oracle verwendet standardmäßig US7ASCII ), sondern der echte Zeichensatz von SQL*Plus, bzw. Ihre cmd.exe Terminal ist höchstwahrscheinlich CP950 oder CP936.

Wenn Sie alles richtig einstellen möchten, können Sie entweder Ihre Umgebungsvariable NLS_LANG=.ZHT16MSWIN950 setzen (CP936 scheint von Oracle nicht unterstützt zu werden) oder ändern Sie Ihre Codepage, bevor Sie sqlplus.exe ausführen mit dem Befehl chcp 437 . Mit diesen richtigen Einstellungen werden Sie keine chinesischen Schriftzeichen sehen, wie Sie es wahrscheinlich erwartet hätten.