一般的に、あなたのポイントはすべて正しいです。 NLS_NCHAR_CHARACTERSET
NVARCHAR2
の文字セットを定義します 、et。 al。列に対してNLS_CHARACTERSET
VARCHAR2
に使用されます 。
US7ASCII
の漢字が表示される可能性があるのはなぜですか ?
その理由は、データベースの文字セットとクライアントの文字セットです(つまり、NLS_LANG
を参照してください)。 値)は両方ともUS7ASCII
。データベースはUS7ASCII
を使用しています また、クライアントがUS7ASCII
を使用してデータを送信すると「考え」ます。 。したがって、文字列の変換は行われず、データはクライアントからサーバーに、またはその逆にビットごとに転送されます。
そのため、実際にはUS7ASCII
でサポートされていない文字を使用できます。 。クライアントが別の文字セットを使用している場合(たとえば、WindowsアプリケーションでODP.NETマネージドドライバーを使用している場合)、データはごみになることに注意してください。また、データベースの文字セットの移行を検討する場合も、同じ問題が発生します。
別の注意:他の文字セットで同じ動作が得られるとは思いません。データベースとクライアントの両方がWE8ISO8859P1
を使用する場合 例えば。また、実際には間違った構成になっていることに注意してください。データベースは文字セットUS7ASCII
を使用しています 、NLS_LANG
値もUS7ASCII
(ほとんどの場合、まったく設定されておらず、OracleはデフォルトでUS7ASCII
に設定しています。 )ただし、SQL * Plusの実際の文字セット、それぞれ。 cmd.exe
ターミナルはおそらくCP950またはCP936です。
すべてを適切に設定したい場合は、環境変数NLS_LANG=.ZHT16MSWIN950
を設定できます。 (CP936はOracleでサポートされていないようです)またはsqlplus.exe
を実行する前にコードページを変更してください コマンドchcp 437
を使用 。この適切な設定では、おそらく予想したように漢字は表示されません。