文字列型についての小ネタ。


MCPについて勉強していたら、こんなことが書いてあった。


データ型割り当てのガイドラインとして、文字列が8,000バイト以下ならvarchar型。

8,000バイトより大きい場合はtext型やimage型を使用と書いてある。


varcharの最大サイズは確かに8,000バイト。

でも、テーブルの列数が多いときには? よく考える必要があると思う。


例えば、極端だが以下のテーブルを作成したとする。

テーブルサンプル

1列目には、char型8000バイトの文字列。(列名:NAME1)

2列目には、varchar型8000バイトの文字列。(列名:NAME2)


・char型は固定長のため、あらかじめ8000バイト分確保している。

・varchar型は入力した文字数分だけ領域を確保している。


そこで、こんなデータを入れてみる。

行サイズ 8060バイトエラー

NAME2に、50バイト分のデータを入れてみると、上記のエラーメッセージが出力される。

メッセージが示すように、SQLServer(2000)では、1行の最大サイズが8060バイトと決まっている。

(ただし、text型やimage型は含まない)


入力したデータが最大サイズを超えてしまったため、エラーが発生してしまうのだ。

通常、データベースのテーブルは、複数のフィールドを組み合わせて構成される。

そのため、8,000バイト以下とはいえ、安易にvarchar型を使用してしまうことには注意を払いたい。

大量の文字列を格納するテーブルを作る際は、1行の合計サイズがどの程度になるかを予測した上で、

型を決めることをお勧めしたい。(自分自身気をつけたいと思う)


予断だが、1行の最大サイズが8,060バイトなので、NAME2に61バイト分のデータを入れれば

エラーになると思ったのだが、予想に反して50バイト分のデータでエラーになってしまった。

ちょっと調べたが、理由はわからなかった。

多少、余裕をもった設計にしておいた方が良いのかもしれない...。