sql >> データベース >  >> RDS >> Oracle

OracleのNLS_NCHAR_CHARACTERSETとNLS_CHARACTERSETの違い

    一般的に、あなたのポイントはすべて正しいです。 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を使用 。この適切な設定では、おそらく予想したように漢字は表示されません。




    1. ORA-00904デコード・エイリアスの識別子が無効です

    2. MySqlDateTimeスタンプをJavaScriptの日付形式に変換します

    3. MySQLのデータベースクエリ効率の最大化-パート2-

    4. SCDタイプ4