はい、OracleデータベースがUnicode文字セットを使用して作成されている場合、NVARCHAR
SQLServerではVARCHAR2
に移行する必要があります Oracleで。 Oracleでは、NVARCHAR
データ型は、データベースの文字セットがUnicodeをサポートしていない場合に、アプリケーションがUnicode文字セットを使用してデータを格納できるようにするために存在します。
ただし、移行時に注意する必要があるのは、文字長のセマンティクスです。 SQL Serverでは、NVARCHAR(20)
20文字にスペースを割り当てます。UCS-2では最大40バイトが必要です。 Oracleでは、デフォルトでVARCHAR2(20)
20バイトのストレージを割り当てます。 AL32UTF8
内 文字セット。これは、6文字に十分なスペースである可能性がありますが、より多くの文字を処理できる可能性があります(AL32UTF8
の1文字 1〜3バイトが必要です。 OracleタイプをVARCHAR2(20 CHAR)
として宣言することをお勧めします。 これは、必要なバイト数に関係なく、20文字にスペースを割り当てたいことを示しています。これは、20文字の文字列が許可され、他の10文字の文字列が拒否される理由を説明するよりもはるかに簡単に伝達できる傾向があります。
セッションレベルでデフォルトの長さセマンティクスを変更して、長さセマンティクスを指定せずに作成したテーブルがバイトセマンティクスではなく文字を使用するようにすることができます
ALTER SESSION SET nls_length_semantics=CHAR;
これにより、CHAR
の入力を回避できます 新しい列を定義するたび。これをシステムレベルで設定することも可能ですが、NLSチームはこれを推奨していません。明らかに、Oracleが提供するすべてのスクリプトが、NLS_LENGTH_SEMANTICS
が存在するデータベースに対して徹底的にテストされているわけではありません。 変更されました。そして、おそらくサードパーティのスクリプトはほとんどありません。