MySQLはストレージエンジンの選択肢を提供します。データの物理ストレージは、ストレージエンジンによって異なります。
MyISAMストレージのVARCHAR
MyISAMでは、VARCHAR
sは通常、文字列の実際の長さに1バイトまたは2バイトの長さを加えたものだけを占めます。これは、行ロック機能ではなく、テーブルロックに対するMyISAMの設計上の制限によって実用化されています。パフォーマンスへの影響には、よりコンパクトなキャッシュプロファイルが含まれますが、レコードオフセットのより複雑な(より遅い)計算も含まれます。
(実際、MyISAMはある程度の選択肢を提供します テーブル全体で発生する列タイプに応じて、固定の物理行サイズと可変の物理行サイズのテーブル形式の間。 VARCHAR
の発生 デフォルトのメソッドのみを変更しますが、TEXT
が存在します blob force VARCHAR
s同じテーブルで可変長法も使用します。)
物理的な保存方法は、テーブルとは別の話であるインデックスでは特に重要です。 MyISAMは両方にスペース圧縮を使用します CHAR
およびVARCHAR
列。つまり、どちらの場合も、データが短いほどインデックス内のスペースが少なくて済みます。
VARCHARのInnoDBストレージ
InnoDBは、他のほとんどの現在のリレーショナルデータベースと同様に、より高度なメカニズムを使用しています。 VARCHAR
最大幅が768バイト未満の列はインラインで格納され、予約された部屋はその最大幅に一致します。より正確には、ここ
:
InnoDBは現在、インデックスでスペース圧縮を実行していません。これは、上記のMyISAMとは逆です。
質問に戻る
ただし、上記のすべては、バージョン間で変更される可能性のある実装の詳細にすぎません。 CHAR
の本当の違い およびVARCHAR
はセマンティックであり、VARCHAR(20)
の間のものも同様です。 およびVARCHAR(50)
。 VARCHAR(20)
に30文字の文字列を格納する方法がないことを確認する 、データベースは、予測どおりに動作するソリューションに統合されると思われるさまざまなプロセッサやアプリケーションの作業をより簡単に、より適切に定義できるようにします。これは大したことです。
特に個人名については、この質問 あなたにいくつかの実用的なガイダンスを与えるかもしれません。とにかく、フルネームが70UTF-8文字を超える人は困っています。