« Rのパッケージ「gputools」 | メイン | ラベル付きの散布図 »

2009年5月22日 (金)

MySQL4.x以降のMemory(Heap)型テーブル

古いMySQL(3.23)をずっと使っていたのだけれど、これだけ古いと64bit版のバイナリが無い。そこで現行版の5.1をテストしてみたところ、気になった違いは1点だけだった。

Memory(Heap)型テーブルでは、文字列が固定長の「char」形式で保存される。可変長の「varchar」は使用不可で、自動的に「char」に変換される。この「char」形式のカラムのメモリ容量が、4.x以降では少し大きくなっているようだ。「指定した文字数」 x 「1文字が消費する最大バイト数」分の容量が必ず割り当てられるようになったらしい。

日本語EUCの場合、最大で3バイト使う文字があるので、「10文字」と指定した場合、10 * 3 = 30バイト割り当てられる。しかもこの場合、アルファベットだけの文字列を格納する場合も、10文字しか入らない。アルファベットだけで10文字だと、10バイト分の容量なので、残り20バイトが無駄になる。ちょっとメモリがもったいないかな?

なお、バイト数ではなく文字数での指定になるので、事前に「char_length」関数でデータをチェックして、最大何文字格納することになるのか調べておくと良いようだ。

トラックバック

このページのトラックバックURL:
http://app.blog.eonet.jp/t/trackback/411818/19876989

MySQL4.x以降のMemory(Heap)型テーブルを参照しているブログ:

コメント

コメントを投稿