BLOBにする、しない、それが問題だ:
文字列をBLOBまたはCHARあるいは VARCHARに格納するかどうか。


本ページは、Ivan Prenosil による Ivan Prenosil's InterBase site 内の記事To BLOB or not to BLOB, that is the question:
Whether to store string in BLOB, or CHAR, or VARCHAR ?
の日本語訳です。 本ページについては、 元ページの原著者であるIvan Prenosil氏から、元ページの情報を日本語で提供することのみを 目的として、電子メールによる許諾を受けています。必要な方は本ページまたは、元ページへの リンクを作成してください。それ以上の公的な利用については、原著者であるIvan Prenosil氏の 許諾が必要です。



CHARとVARCHARの違い

多くの人々はCHARが定義長いっぱいの長さで格納されるのに対して、 VARCHARは実際のデータだけを格納するので、よりよいと思われています。 しかし、それは真実ではない。 実際のところ、CHARもVARCHAR もメモリバッファ内に 定義長いっぱいで格納されます。行がディスク上に格納されるとき RLE圧縮アルゴリズムが行全体を圧縮するために使われます。すなわちCHAR, VARCHAR, INTEGER, DATEなどが、すべて一緒に。そのため、もしあなたがディスクスペースを 節約したいと望むのならば、CHARはVARCHARと比較してほんの少しだけよい (違いはVARCHARは2バイトで文字列長を格納すること)。またバグもあり、 もしあなたが定義長よりも短い文字列をアサインしても、VARCHAR文字列の末尾部分が 適切にクリーンアップされないことがおき、そのため効率の悪い圧縮が起こります。 (この問題はFirebird-0.9.4で修正されました)

多くの人々はまたCHARは定義長いっぱいの長さを送るのに対して、 VARCHARはネットワーク上に実際のデータだけを送ると信じています。 これも真実ではない。 クライアントとサーバー間の通信は固定長のメッセージ経由で行われています。 そのためCHARもVARCHARも定義長いっぱいの長さで送信されています。 (この問題はIB-6.5で修正されました)

したがってCHARと VARCHARのどちらを使うのかということは、アプリケーションの 要求にだけ基づくべきです。たとえば固定長のコードはCHARに格納し、名前はVARCHARに 格納(正しい結合が可能)しなさい。


BLOB対VARCHARの有利、不利

本パラグラフのVARCHARに言及しているすべてのコメントは、CHARにも当てはまります。 コメントの終わりごとにある BLOB + またはVARCHAR + はどちらのデータタイプがよりよいか、示すものです。
Copyright © 2001 Ivan Prenosil
初公開日:2000年07月30日, 元ページ取得日:2001年07月20日, 本ページ最終更新日:2001年07月30日
日本語訳: 木村明治(KIMURA, Meiji)