documents:database:sql-0003
SQLServer2005のレコード長
2009年06月16日 09時54分41秒
CHAR型の限界
1> create table t1 ( 2> a char(8000) 3> ,b char(61) 4> ); 5> go メッセージ 1701、レベル 16、状態 1、サーバー GUNTRA、行 1 7 バイトの内部オーバーヘッドを含めて、最小行サイズが 8068 になるので、テーブル 't1' を作成または変更できませんでした。こ のサイズは、テーブル行の最大許容サイズの 8060 バイトを超えています。 1> create table t1 ( 2> a char(8000) 3> ,b char(60) 4> ); 5> go メッセージ 1701、レベル 16、状態 1、サーバー GUNTRA、行 1 7 バイトの内部オーバーヘッドを含めて、最小行サイズが 8067 になるので、テーブル 't1' を作成または変更できませんでした。こ のサイズは、テーブル行の最大許容サイズの 8060 バイトを超えています。 1> create table t1 ( 2> a char(8000) 3> ,b char(54) 4> ); 5> go メッセージ 1701、レベル 16、状態 1、サーバー GUNTRA、行 1 7 バイトの内部オーバーヘッドを含めて、最小行サイズが 8061 になるので、テーブル 't1' を作成または変更できませんでした。こ のサイズは、テーブル行の最大許容サイズの 8060 バイトを超えています。 1> create table t1 ( 2> a char(8000) 3> ,b char(53) 4> ); 5> go 1> drop table t1; 2> go 1>
1レコードは 8060バイト 8053バイトらしい。
VARCHAR型の自由度
1> create table t2 ( 2> a varchar(8000) 3> ,b varchar(61) 4> ); 5> go 1> insert into t2 values(space(8000), space(61)); 2> go (1 行処理されました) 1>
でもVARCHAR型で定義するなら大丈夫。きっちりレコードのINSERTもできたっぽい。
SQLServer2005のレコード長制限の突破
1> create table t3 ( 2> a varchar(8000) 3> ,b varchar(8000) 4> ,c varchar(8000) 5> ); 6> go 1> insert into t3 values(space(8000), space(8000), space(8000)); 2> go (1 行処理されました) 1>
合計で 8000×3=24000バイトなのですが、あらら、INSERT出来たみたいです。 でも、項目の最大長は8000バイトですので、24000バイトの指定はエラーになります。
1> create table t4 ( 2> a varchar(24000) 3> ); 4> go メッセージ 131、レベル 15、状態 2、サーバー GUNTRA、行 2 列 'a' に指定したサイズ (24000) は、どのデータ型の許容最大サイズ (8000) も超えています。 1> create table t4 ( 2> a varchar(max) 3> ); 4> go 1> insert into t4 values(space(48000)); 2> go (1 行処理されました) 1>
しかし、長さ指定で “max” を使うと、その指定をした項目は2GBまで扱えます。
- 結局何バイト(何文字か?)が正しいのやら。説明がめんどくさいです。 - 努力中の人 (2006年12月07日 18時01分07秒)
documents/database/sql-0003.txt · 最終更新: 2023/04/14 02:32 by 127.0.0.1