Unterschied zwischen NLS_NCHAR_CHARACTERSET abd NLS_CHARACTERSET für Oracle
ich habe eine kurze Frage hier, ich würde gerne wissen, der Unterschied zwischen
NLS_NCHAR_CHARACTERSET und NLS_CHARACTERSET Einstellung in oracle ??
aus meinem Verständnis NLS_NCHAR_CHARACTERSET ist für NVARCHAR-Datentypen
und für NLS_CHARACTERSET wäre für VARCHAR2-Datentypen.
habe ich versucht, dies zu testen, auf meinem Entwicklungs-server, welche meine aktuellen Einstellungen für CHARACTERSET ist wie folgt :-
PARAMETER VALUE
------------------------------ ----------------------------------------
NLS_NCHAR_CHARACTERSET AL16UTF16
NLS_NUMERIC_CHARACTERS .,
NLS_CHARACTERSET US7ASCII
Dann fügte ich einige chinesische Zeichen Werte in die Datenbank. ich trug die Zeichen in eine Tabelle namens data_ und aktualisiert die Spalte für die ADRESSE und ADDRESS_2, die VARCHAR2-Spalten. Indem Sie mit der rechten aus meinem Verständnis mit der aktuellen Einstellung für NLS_CHARACTERSET US7ASCII , chinesische Zeichen sollte nicht unterstützt werden, aber es ist noch zu zeigen, in der Datenbank ?? tut NLS_NCHAR_CHARACTERSET Vorrang vor dieser ??
Danke.
okay, notiert. danke für den Hinweis 🙂
InformationsquelleAutor Steven Tang Ti Khoon | 2016-04-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Im Allgemeinen alle deine Punkte sind richtig.
NLS_NCHAR_CHARACTERSET
definiert den Zeichensatz fürNVARCHAR2
, et. al. Spalten in der Erwägung, dassNLS_CHARACTERSET
ist fürVARCHAR2
.Der Grund ist, Ihre Datenbank-Zeichensatz und Ihr client-Zeichensatz (d.h. sehen
NLS_LANG
Wert) sind beideUS7ASCII
. Ihre Datenbank verwendetUS7ASCII
und es "denkt" auch der client sendet Daten mitUS7ASCII
. Somit spielt es keine Konvertierung der strings, die Daten werden übertragen, eins-zu-eins vom client zum server und Umgekehrt.Aufgrund dieser Tatsache können Sie Zeichen verwenden, die eigentlich nicht unterstützt von
US7ASCII
. Seien Sie sich bewusst, im Falle der client verwendet einen anderen Zeichensatz (z.B. wenn Sie ODP.NET Managed-Treiber in eine Windows-Anwendung) die Daten werden Müll! Auch wenn Sie denken würden, dass ein Datenbank-Zeichensatz-migration Sie haben das gleiche Problem.Noch ein Hinweis: ich glaube nicht, erhalten Sie das gleiche Verhalten mit anderen Zeichensätzen, z.B. wenn Ihre Datenbank und Ihr Kunde beide verwenden würde
WE8ISO8859P1
zum Beispiel. Auch bewusst sein, dass Sie tatsächlich eine falsche Konfiguration. Ihre Datenbank verwendet ZeichensatzUS7ASCII
IhreNLS_LANG
Wert ist auchUS7ASCII
(die meisten wahrscheinlich, es ist überhaupt nicht festgelegt-und Oracle-defaults es zuUS7ASCII
), aber die real-Zeichensatz von SQL*Plus, resp. Ihrecmd.exe
terminal ist wahrscheinlich CP950 oder CP936.Wenn Sie gerne alles richtig, können Sie entweder Ihre Umgebungsvariable
NLS_LANG=.ZHT16MSWIN950
(CP936 scheint nicht unterstützt Oracle) oder ändern Sie die codepage vor dem ausführensqlplus.exe
mit Befehlchcp 437
. Mit dieser richtigen Einstellungen werden Sie keine chinesischen Zeichen, wie Sie wohl erwartet hätte.InformationsquelleAutor Wernfried Domscheit