MySQLはvarcharフィールドをどのように保存しますか?次のパターンが適切なストレージサイズを表していると想定できますか?
1,2,4,8,16,32,64,128,255(最大)
例による説明。20文字のvarcharフィールドがあるとします。MySQLはこのフィールドを作成するときに、基本的に32バイトのスペースを予約しますか(バイトかどうかはわかりません)、20バイトしか入力できませんか?
巨大なテーブルのディスク容量を最適化するのが心配だと思います。
質問に答えるために、ディスク上でMySqlは1 +データを格納するためにフィールドで使用されるサイズを使用します(したがって、列がvarchar(45)と宣言され、フィールドが "FooBar"の場合、ディスク上で7バイトを使用します。もちろん、マルチバイト文字セットを使用している場合を除き、14バイトを使用します)。したがって、どのように列を宣言しても、ストレージ側では違いはありません(大規模なテーブルのディスク最適化について心配していると述べました)。ただし、MySqlが一時テーブル(SORT、ORDERなど)を作成するときにVARCHARがCHARに変換され、1つのページに収めることができるレコードが多いほど、メモリが少なくなり、テーブルスキャンが高速になるため、クエリに違いが生じます。なれ。
MySQLは、varcharフィールドを可変長レコードとして格納し、レコードサイズを示す1バイトまたは2バイトのプレフィックスを付けます。
ストレージサイズのパターンがあっても、可変長のレコードストレージを処理するときにMySQLがどのように機能するかには実際には何の違いもありません。varchar(x)宣言で指定された長さは、格納できるデータの最大長を決定するだけです。基本的に、varchar(16)は、ディスクに関してvarchar(128)と同じです。
このマニュアルページには、より詳細な説明があります。
編集:あなたの更新された質問に関して、答えはまだ同じです。varcharフィールドは、そこに格納するデータと同じ量のディスク上のスペースのみを使用します(さらに1バイトまたは2バイトのオーバーヘッド)。したがって、varchar(16)またはvarchar(128)のどちらを使用するかは関係ありません。10文字の文字列を格納する場合、使用するディスク領域は10バイト(プラス1または2)のみです。 。