文字列型についての小ネタ。
MCPについて勉強していたら、こんなことが書いてあった。
データ型割り当てのガイドラインとして、文字列が8,000バイト以下ならvarchar型。
8,000バイトより大きい場合はtext型やimage型を使用と書いてある。
varcharの最大サイズは確かに8,000バイト。
でも、テーブルの列数が多いときには? よく考える必要があると思う。
例えば、極端だが以下のテーブルを作成したとする。
1列目には、char型8000バイトの文字列。(列名:NAME1)
2列目には、varchar型8000バイトの文字列。(列名:NAME2)
・char型は固定長のため、あらかじめ8000バイト分確保している。
・varchar型は入力した文字数分だけ領域を確保している。
そこで、こんなデータを入れてみる。
NAME2に、50バイト分のデータを入れてみると、上記のエラーメッセージが出力される。
メッセージが示すように、SQLServer(2000)では、1行の最大サイズが8060バイトと決まっている。
(ただし、text型やimage型は含まない)
入力したデータが最大サイズを超えてしまったため、エラーが発生してしまうのだ。
通常、データベースのテーブルは、複数のフィールドを組み合わせて構成される。
そのため、8,000バイト以下とはいえ、安易にvarchar型を使用してしまうことには注意を払いたい。
大量の文字列を格納するテーブルを作る際は、1行の合計サイズがどの程度になるかを予測した上で、
型を決めることをお勧めしたい。(自分自身気をつけたいと思う)
予断だが、1行の最大サイズが8,060バイトなので、NAME2に61バイト分のデータを入れれば
エラーになると思ったのだが、予想に反して50バイト分のデータでエラーになってしまった。
ちょっと調べたが、理由はわからなかった。
多少、余裕をもった設計にしておいた方が良いのかもしれない...。