複数の言語を保存する必要がある場合はいつでも NVARCHAR を使用する必要があります。アジア言語に使用する必要があると思いますが、引用しないでください。
たとえば、ロシア語を varchar に格納する場合の問題は次のとおりです。正しいコード ページを定義している限り問題ありません。しかし、デフォルトの英語の SQL インストールを使用すると、ロシア語の文字が正しく処理されないとしましょう。NVARCHAR() を使用していた場合、それらは適切に処理されます。
編集
わかりました、 MSDNを引用させてください。おそらく私は具体的に説明しましたが、varcar 列に複数のコード ページを格納したくないのですが、できません。
char、varchar、varchar(max)、またはテキスト データ型で格納されているテキスト データを処理する場合、考慮する必要がある最も重要な制限は、単一のコード ページからの情報のみがシステムによって検証されるということです。(複数のコード ページからのデータを保存できますが、これはお勧めしません。) データの検証と保存に使用される正確なコード ページは、列の照合順序によって異なります。列レベルの照合が定義されていない場合は、データベースの照合が使用されます。特定の列に使用されるコード ページを確認するには、次のコード例に示すように、COLLATIONPROPERTY 関数を使用できます。
さらにいくつかあります:
この例は、グルジア語やヒンディー語などの多くのロケールが Unicode のみの照合であるため、コード ページを持たないという事実を示しています。これらの照合は、char、varchar、または text データ型を使用する列には適していません
したがって、グルジア語またはヒンディー語は実際には nvarchar として保存する必要があります。アラビア語も問題です。
遭遇する可能性のあるもう 1 つの問題は、サポートしたいすべての文字がコード ページに含まれているとは限らない場合、データを格納できないことです。多くの場合、Windows は特定のコード ページを "最適な" コード ページと見なします。つまり、そのコード ページを使用してすべてのテキストを処理できるという保証はありません。それは単に利用可能な最高のものです。その一例がアラビア文字です。バルーチ語、ベルベル語、ペルシア語、カシミール語、カザフ語、キルギス語、パシュトー語、シンド語、ウイグル語、ウルドゥー語など、さまざまな言語をサポートしています。これらのすべての言語には、Windows コード ページ 1256 で定義されているアラビア語以外の文字が追加されています。
Unicode を使用している場合は、1 つの列にさまざまな言語を格納できますが、1 つの照合を使用してのみ並べ替えることができることに注意してください。ラテン文字を使用しているが、他のラテン言語のように並べ替えられない言語がいくつかあります。アクセントはこの良い例です。例を思い出せませんが、Y が英語の Y のようにソートされない東ヨーロッパ言語がありました。次に、スペイン語のユーザーが h の後にソートされることを期待するスペイン語の ch があります。
全体として、内部化に対処するときに対処しなければならないすべての問題があります。私の意見では、最初から Unicode 文字を使用し、余分な変換を避け、スペース ヒットを取る方が簡単です。したがって、以前の私の声明。