VARCHAR
および NVARCHAR
データ型についてSQL Server は、VARCHAR
と NVARCHAR
という 2 つのキー文字列データ型を利用します。 効果的なデータベース設計と切り捨てによるデータ損失を防ぐには、その制限を知ることが重要です。
NVARCHAR
および VARCHAR
サイズ制限:
NVARCHAR
: Unicode 文字を格納します。 デフォルトの最大長は 4000 文字 (NVARCHAR(4000)
) です。 ただし、NVARCHAR(MAX)
を使用すると、最大 2GB の Unicode データを保存できます。
VARCHAR
: 半角文字を格納します。デフォルトの最大長は 8000 文字 (VARCHAR(8000)
) です。 同様に、VARCHAR(MAX)
は最大 2GB のシングルバイト データをサポートします。
文字列連結の結果は、入力データ型に大きく依存します。
VARCHAR(n) VARCHAR(n)
: 結果は VARCHAR(8000)
となり、8000 文字に制限されます。NVARCHAR(n) NVARCHAR(n)
: 結果は NVARCHAR(4000)
となり、上限は 4000 文字です。VARCHAR(n) NVARCHAR(n)
: NVARCHAR(4000)
の優先順位が高いため、デフォルトは NVARCHAR
です。重要なのは、NVARCHAR(MAX)
または VARCHAR(MAX)
を使用すると、結合された長さが 2 GB の制限を超えない限り、連結中の切り捨てを回避できることです。
N
で始まるリテラル (例: N'My String'
) は、NVARCHAR(n)
(最大 4000 文字) または NVARCHAR(MAX)
(4000 文字を超える場合) として扱われます。N
プレフィックスのないリテラル (例: 'My String'
) は、VARCHAR(n)
(最大 8000 文字) または VARCHAR(MAX)
(8000 文字を超える場合) として扱われます。CONCAT
関数の使用:
CONCAT
関数は、すべての入力を MAX
データ型として扱い、切り捨てを防ぐため、大きな文字列の連結に推奨されます。
=
演算子の回避:
文字列を追加する場合は、切り捨てにつながる可能性があるため、 =
以外のデータ型変数を含む MAX
演算子を避けてください。 代わりに、連結結果を変数に直接代入します。
SQL Server Management Studio で長い動的 SQL クエリを切り捨てずに表示するには:
@SQL
を動的 SQL 変数に置き換えます。<code class="language-sql">SELECT @SQL as [processing-instruction(x)] FOR XML PATH</code>
この XML ベースのアプローチにより、事実上無制限の長さの文字列を表示できます。
以上がSQL Server における VARCHAR と NVARCHAR の制限と動作は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。