SQL Serverでは、一行のデータサイズは8060バイトを超えることができません。この制限に気づかないで、考え込んでしまう初心者はよくいるもの。文章を登録するプログラムでは、1レコードが8060バイトを超えることもありがちです。
気をつけるべきところは、「8060バイトを超えるレコードを定義することはできる」という点です。たとえば以下のようなテーブルは作成できます。
●「論文」テーブル
[文章ID] [NVARCHAR] (10)
[著者] [NVARCHAR] (50)
[タイトル] [NVARCHAR] (200)
[本文] [NVARCHAR] (4000) |
|
このテーブルに対して小さい論文をたくさん登録するような場合に、「あるレコードにINSERTはできるが、追記していったら突然エラーになった」という形で初めてこの制限を知るケースがあるようです。
このテーブルはNVARCHARで4260文字ですから、合計8520バイトのレコードができるわけです。NVARCHARは可変長ですから、本文が短ければ何も問題はありません。しかし、全列に最大文字数を入れることはできません。入れようとすると以下のエラーが出ます。
「1 行のサイズ 8335 が許容最大値 8060 を超えているので作成できません。」
TEXT型などの大容量データタイプを使えば、この制限は越えられますが、TEXT型はWHERE句の条件に指定できないなどの制限がありますから、全文検索を利用することはできません。この制限を十分に考慮して設計すべきでしょう。 |