一般的なルールは、 CHARを選択することです すべての行が同じ長さに近い場合 。 VARCHARを選択します (または NVARCHAR )長さが変化する 大幅。すべての行が同じ長さであるため、CHARも少し高速になる可能性があります。
DBの実装によって異なりますが、通常はVARCHAR(または NVARCHAR )実際のデータに加えて、(長さまたは終了のために)さらに1バイトまたは2バイトのストレージを使用します。したがって、(1バイトの文字セットを使用していると仮定して)「FooBar」という単語を格納します
- CHAR(6) =6バイト(オーバーヘッドなし)
- VARCHAR(100) =8バイト(2バイトのオーバーヘッド)
- CHAR(10) =10バイト(4バイトの無駄)
一番下の行はCHARです できます 速く その他のスペース効率 比較的同じ長さのデータの場合(2文字以内の長さの違い)。
注 :Microsoft SQLには、VARCHARに対して2バイトのオーバーヘッドがあります。これはDBごとに異なる場合がありますが、通常、VARCHARの長さまたはEOLを示すために少なくとも1バイトのオーバーヘッドが必要です。
Gavenが指摘したように コメント内:マルチバイト文字セットに関しては状況が変わります。これは、VARCHARがはるかに優れた選択肢になる場合です。
VARCHARの宣言された長さに関するメモ :実際のコンテンツの長さを保存するため、未使用の長さを無駄にすることはありません。したがって、6文字を VARCHAR(6)、VARCHAR(100)、、またはに格納します。 VARCHAR(MAX) 同じ量のストレージを使用します。 VARCHAR(MAX)を使用する場合の違いについての詳細をお読みください。 最大を宣言します 保存される量を制限するためのVARCHAR単位のサイズ。
コメントの中でAlwaysLearningは、MicrosoftTransact-SQLのドキュメントは反対のことを言っているようだと指摘しました。エラーであるか、少なくともドキュメントが不明確であることをお勧めします。