text 型データと image 型データの使用

重要な注意事項重要

この機能は、将来のバージョンの Microsoft SQL Server では削除される予定です。 新しい開発作業では、この機能の使用を避け、現在この機能を使用しているアプリケーションは修正するようにしてください。代替のデータ型は varchar(max)、nvarchar(max)、および varbinary(max) です。詳細については、「大きな値のデータ型の使用」を参照してください。

MicrosoftSQL Server では、8,000 文字を超える文字列や 8,000 バイトより長いバイナリ データは text および image という名前の特殊なデータ型に格納されます。4,000 文字を超える Unicode 文字列は ntext データ型に格納されます。

たとえば、SQL Server データベースにインポートする必要がある顧客情報が格納された大きなテキスト ファイル (.txt) があるとします。このデータをデータ テーブルの複数の列に統合するのではなく、1 つのデータとして格納します。この場合は、text データ型の列を 1 つ作成します。1 つのロゴの大きさが 10 KB である会社のロゴが、現在 TIFF (Tagged Image File Format) イメージ (.tif) として格納されているとします。このロゴを格納するには image データ型の列を 1 つ作成します。

格納されるテキスト データが Unicode 形式の場合は ntext データ型を使用します。たとえば、海外の複数の顧客向けに同文の手紙を作成する場合、各言語に特有の綴りや文字が含まれることがあります。これらのデータは ntext 型列に格納します。

text 型と ntext 型のデータ値には、それぞれ照合順序があります。照合順序では、比較の規則、大文字小文字やアクセントの区別などの属性が定義されます。text 型の値の照合順序では、コード ページも定義されます。コード ページでは、各文字を表現するために使用するビット パターンが定義されます。ntext 型の各値には Unicode コード ページが使用されます。このコード ページはすべての照合順序で同一です。各データベースには既定の照合順序があります。text 型または ntext 型の列が作成されるときに、COLLATE 句を使って特定の照合順序を割り当てていない場合は、データベースの既定の照合順序が割り当てられます。照合順序が異なる text 型または ntext 型の 2 つの値が結合または比較される場合、照合順序の優先順位に関する規則により、操作に使用される照合順序が決まります。

image 型のデータはビット列として格納され、SQL Server ではこのデータは解釈されません。image 型の列内のデータは、アプリケーションで解釈する必要があります。たとえば、アプリケーションは、BMP、TIFF、GIF、または JPEG の各形式を使用して image 型の列にデータを格納できます。image 型の列からデータを読み取るアプリケーションでは、データ形式を正しく認識し、正確に表示する必要があります。image 型の列は、イメージ データ値を構成するビット列の格納場所を提供するだけです。

text 型、ntext 型、および image 型の値の格納に使用する行のテキスト

通常、text 型、ntext 型の文字列、または image 型のビット列は、データ行の外部に格納される大きな文字列またはバイナリ列で、最大 2 GB です。データ行には、ツリーのルート ノードを指す 16 バイトのテキスト ポインタだけが含まれます。このツリーは、文字列の一部が格納される各ページにマップされた複数の内部ポインタから構築されます。

SQL Server では、小~中程度の量の text 型、ntext 型、または image 型の値をデータ行に格納することができ、これらのデータにアクセスするクエリの速度を向上できます。

text 型、ntext 型、または image 型の文字列をデータ行に格納するときに、SQL Server では、文字列の読み取り、書き込みのために個別のページやページのセットにアクセスする必要はありません。これにより、text 型、ntext 型、または image 型の行内の文字列の読み取りと書き込みが、varchar 型、nvarchar 型、または varbinary 型の文字列の読み取りや書き込みと同程度に高速になります。

text 型、ntext 型、または image 型の文字列をデータ行に格納するには、sp_tableoption ストアド プロシージャを使用して text in row オプションを有効にします。

sp_tableoption N'MyTable', 'text in row', 'ON';

必要に応じて、データ行に格納される text 型、ntext 型、および image 型の文字列またはビット列の長さの最大値を 24 ~ 7,000 バイトの範囲で指定できます。

sp_tableoption N'MyTable', 'text in row', '1000';

制限値を指定する代わりに 'ON' を指定すると、既定で 256 バイトに設定されます。多くの場合、この既定値でもパフォーマンス上の利点が得られます。この値は、短い文字列とルート テキスト ポインタを行に確実に格納するには十分な大きさですが、1 ページあたりの行数が減少してパフォーマンスに影響するほどの大きさではありません。

通常は 72 未満の値を設定しないでください。また、極端に大きい値も設定しないでください。特に、ほとんどのステートメントが text 型、ntext, 型、および image 型の列を参照しないテーブルや、複数の text 型、ntext 型、および image 型の列があるテーブルの場合には、極端に大きい値は設定しないでください。

sp_tableoption オプションに値 'OFF' または 0 を指定することで、このオプションをオフにすることもできます。

sp_tableoption N'MyTable', 'text in row', 'OFF';