Microsoft SQL は初めてです。テキストを Microsoft SQL サーバーに保存する予定で、特殊な国際文字が含まれます。Unicode に固有の「データ型」はありますか、それとも Unicode 番号 (つまり \u0056) を参照してテキストをエンコードした方がよいですか?
4 に答える
Nvarchar
/ Nchar
(MSDNリンク)を使用します。以前はNtext
データ型もありましたが、現在は廃止されてNvarchar
。
char
列は、Unicode以外の対応する列(および)の2倍のスペースを占めますvarchar
。
次に、それらに「手動で」挿入する場合は、 N
Unicodeテキストであることを示すために使用します。
INSERT INTO MyTable(SomeNvarcharColumn)
VALUES (N'français')
特殊な国際文字とは、どういう意味ですか? 特別な意味でそれらが一般的ではなく、時折発生するだけである場合、非常に多数の行または多数のインデックス作成を含むテーブルの状況では、nvarchar のオーバーヘッドが意味をなさない可能性があります。
必要に応じて Unicode を使用することには大賛成ですが、それが適切な場合を理解することは重要です。
データを異なる暗黙のコード ページ (同じデータベース内の日本語と中国語) と混合している場合、または単に国際化とローカリゼーションを前向きにしたい場合は、列を Unicode にして nvarchar データ型を使用する必要がありますが、それはまったく問題ありません。Unicode は、すべての並べ替えの問題を魔法のように解決するわけではありません。
常に主に ASCII を保存し、時折外国語の文字を保存することがわかっている場合は、UTF-8 データまたは HTML エンコード データを varchar に保存してください。データがすべて日本語でコード ページ 932 (またはその他の単一コード ページ) の場合でも、2 バイト文字を varchar に格納できますが、それでも 2 バイトを使用します。要点は、既に DBCS 照合を使用している場合、国際文字はもはや「特別」ではないということです。これは、データ ストレージだけでなく、クエリや他のデータフローでそのような列を処理する際のインデックスやワーキング セットでもあります。
また、すべての文字データが nvarchar である必要があるという包括的な規則を作成しないでください。コードまたは識別子である多くの列にとって無駄です。
コラムがあるときはいつでも、同じ質問に答えてください。
データの種類は何ですか?
範囲は?
NULL は許可されますか?
サイズの限界は?
不正なデータが最初から入らないようにするために、今すぐ適用する必要がある制約はありますか?
テーブルの文字セット機能とその中の文字列はデータベースに指定されており、データベースにUnicode照合がある場合、テーブル内の文字列はUnicodeです。文字列列についても、Unicode文字列を格納できるようにするためにnvarchar
またはデータ型を使用する必要があります。nchar
ただし、この機能は、データベースにutf8またはUnicodeの文字セットまたは照合がある場合に機能します。詳細については、このリンクをお読みください。UnicodeとSQLServer