1

これはおそらくばかげた質問ですが、私は尋ねる必要があります...

という画像を処理するための MySQL テーブルを作成しましたimages。その中に、 という画像の拡張子を保持する属性がありますextension

受け入れられる画像拡張子のほとんどは、jpgまたはpngまたはgifまたはbmpまたはjpegまたはです。tiffつまり、最大長は4文字です。

ここで、MySQL テーブルで次のように属性を宣言する必要があります。

extension char(4)

また

extension varchar(4)

おそらくパフォーマンスにこれまでにない影響はありませんが、最初からモデルを最適化したい...

誰?

4

2 に答える 2

3

依存します....

MySQLのドキュメントからこれを見ると

Value      CHAR(4)  Storage Required    VARCHAR(4)  Storage Required
''         '    '   4 bytes             ''          1 byte
'ab'       'ab  '   4 bytes             'ab'        3 bytes
'abcd'     'abcd'   4 bytes             'abcd'      5 bytes
'abcdefgh' 'abcd'   4 bytes             'abcd'      5 bytes

ご覧のように、CHAR の 4 文字には 4 バイトが必要ですが、VARCHAR には 5 バイトが必要です。拡張子の大部分が 4 文字である場合、CHAR の方がスペース効率が高くなります。

あなたの場合、3が過半数になると推測しているので、VARCHARがより良い選択です。

ジェームズ:-)

于 2013-02-19T09:46:28.640 に答える
2

編集済み、以前の回答で間違った仮定をしていました。http://dev.mysql.com/doc/refman/5.0/en/char.htmlからの抜粋を貼り付けます(強調を追加)

CHAR 型と VARCHAR 型は似ていますが、保存方法と取得方法が異なります。MySQL 5.0.3 の時点では、最大長と末尾のスペースが保持されるかどうかも異なります。

CHAR および VARCHAR 型は、格納する最大文字数を示す長さで宣言されます。たとえば、CHAR(30) は 30 文字まで保持できます。

CHAR 列の長さは、テーブルの作成時に宣言した長さに固定されます。長さは 0 から 255 までの任意の値です。CHAR 値が格納されると、指定された長さになるまで右側にスペースが埋め込まれます。CHAR 値が取得されると、末尾のスペースが削除されます。

VARCHAR 列の値は可変長文字列です。長さは、MySQL 5.0.3 より前では 0 から 255、5.0.3 以降では 0 から 65,535 の値として指定できます。MySQL 5.0.3 以降での VARCHAR の有効な最大長は、最大行サイズ (すべての列で共有される 65,535 バイト) と使用される文字セットの影響を受けます。

CHAR とは対照的に、VARCHAR 値は、1 バイトまたは 2 バイトの長さのプレフィックスとデータとして格納されます。長さのプレフィックスは、値のバイト数を示します。列は、値が 255 バイト以下しか必要としない場合は長さ 1 バイトを使用し、値が 255 バイトを超える可能性がある場合は長さ 2 バイトを使用します。

于 2013-02-19T09:37:29.193 に答える