2012-02-02 3 views
3

テーブルに指定された文字列の長さを検索しようとしています。varchar(max)カラムの長さを見つけよう

私はCHARACTER_MAXIMUM_LENGTHの助けを借りてinfomation_schema.columnsからこれを行います。

ただし、varchar(max)の場合は-1を返します。 varchar(max),nvarchar(max)などの列がテーブルに存在するときに最大許容長さを返すべきかどうか疑問に思っていましたか?

+3

information_schema.columnsは、varchar、nvarcharカラムの理論上の長さです。実際ではありません。 A(max)列は0〜2000000000バイトです。これに基づいて計算を行うことはできません。 10個のvarcharカラムのそれぞれが100バイトの長さを持つ場合、0または1000バイトを取ることができます。まだ野生のバリエーション – gbn

+1

カラム内の文字列の最大長またはカラム内の最長文字列の長さを探していますか?あなたは 'varchar(max)'を無制限(賢明な程度)として扱うことができます。 – Ray

+0

IIRC、 'nvarchar(MAX)'は従来の 'ntext'タイプに相当します。つまり、 'nvarchar(4000)'よりも行の格納に関する点が異なって扱われます。これは、 'nvarchar(MAX)'の前で最大の値だと思います。 – Yuck

答えて

1

はい、varchar(max)またはnvarchar(max)列の最大長は無制限ではありません。 ストレージの制限は2GB(2^31 -1バイト)です。 データが8kb未満の場合は、通常のvarchar/nvarcharカラムとして動作します。次に、個々の行のデータが8kbより大きい場合、それは大きなオブジェクトtext/ntext値として格納されます。 2つのデータ型のラッパーのように考えることができます。

ただし、最大文字数2000000000ではありません。 varchar(max)列の場合は2147483645、nvarchar(max)列の場合は1073741822です。 これは、nvarcharに1文字あたり2バイトがあり、varcharに1文字あたり1バイトがあり、可変列のデータ長を格納するために2バイトが必要なためです。

私は2GBの制限から余分なメタデータを差し引いたとは思っていませんが、他に何か見つけたら明日コメントします。

関連する問題