まとめ ブログ ダウンロード 掲示板 メール

れぶろぐ

< 2006-05-19 (金) 2006-05-21 (日) > 最新


2006-05-20 (土)

VARCHAR 型の消費バイト

MySQL 4.0 → 4.1 に移行しようとして、 テーブルの定義を眺めていた時に、ふと思った疑問。

「この varchar(32) で定義されたメールアドレスのカラムも、 UTF-8 で書き込まれて、以前の3倍容量を食うのか?」

そう思い、MySQL のマニュアルの Unicode のところを読むと、 以下のように書かれていた。

ヒント:スペースを UTF8 で保存するには、CHAR ではなく VARCHAR を使用してください。 そのようにしないと、MySQL では CHAR(10) CHARACTER SET utf8 カラムに対して 30 バイトを確保しなければなりません。 これは、使用可能な最大長が 30 バイトであるためです。

??? 意味が分かりません。 多分、翻訳のミスか何かだろうと思い、英語の原文のほうを見てみる。

Tip: To save space with UTF-8, use VARCHAR instead of CHAR. Otherwise, MySQL must reserve three bytes for each character in a CHAR CHARACTER SET utf8 column because that is the maximum possible length. For example, MySQL must reserve 30 bytes for a CHAR(10) CHARACTER SET utf8 column.

ようやく意味が分かった。 最初の部分の訳は、「UTF-8 使用時に容量を節約したければ」が正解。 CHAR(10) と定義すると問答無用で 30 バイト持っていかれるが、 VARCHAR(10) って定義しても、 データが英数字だけなら 10 バイトくらいしか消費しないってことか。

Tags: MySQL | このエントリを含む del.icio.us | このエントリを含むはてなブックマーク | このエントリを含む livedoor クリップ | Permalink
本日のリンク元

編集