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

SQLでVARCHARではなくCHARを選択するためのユースケースは何ですか?

    一般的なルールは、 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のドキュメントは反対のことを言っているようだと指摘しました。エラーであるか、少なくともドキュメントが不明確であることをお勧めします。



    1. T-SQLを使用して日月と年から日付を作成する

    2. カスタムORDERBY説明

    3. OLE DBソースコンポーネントのストアドプロシージャパラメータに値を渡すにはどうすればよいですか?

    4. SQLiteで毎月第1月曜日を返す