前述のVARCHAR と CHAR は 2 つの主要な文字列型です。残念ながら、これらの値がディスクとメモリにどのように保存されるかは、ストレージ エンジンの特定の実装に依存するため、正確に説明することは困難です。以下の説明では、使用されるストレージ エンジンが InnoDB および/または MyISAM であると想定しています。これら 2 つのストレージ エンジンを使用していない場合は、使用しているストレージ エンジンのドキュメントを参照してください。 まず、VARCHAR 値と CHAR 値が通常どのようにディスクに保存されるかを見てみましょう。ストレージ エンジンは CHAR または VARCHAR 値をメモリとディスクに異なる形式で保存する可能性があるため、MySQL サーバーによってストレージ エンジンから読み取られた値は別のストレージ形式に変換する必要がある場合があることに注意してください。 VARCHAR型VARCHAR 型は可変長文字列を格納するために使用され、最も一般的な文字列データ型です。必要なスペースのみを使用するため、固定長型よりもスペース効率が高くなります (たとえば、文字列が短いほど、使用するスペースが少なくなります)。例外が 1 つあります。MySQL テーブルが ROW_FORMAT=FIXED を使用して作成されると、各行は固定長を使用して保存されるため、スペースが無駄になります。 VARCHAR では、文字列の長さを記録するために 1 バイトまたは 2 バイトの追加バイトが必要です。列の最大長が 255 バイト以下の場合は、それを表すために 1 バイトのみが使用され、それ以外の場合は 2 バイトが使用されます。 latin1 文字セットを想定すると、VARCHAR(10) 列には 11 バイトのストレージ スペースが必要です。 VARCHAR(1000) 列には、長さ情報を格納するために 2 バイトが必要なため、1002 バイトが必要です。 VARCHAR はストレージスペースを節約するため、パフォーマンスにも役立ちます。ただし、行は可変長であるため、UPDATE によって行が以前よりも長くなる可能性があり、追加の作業が必要になります。行のサイズが大きくなり、ページ上に行を保存するスペースがなくなった場合、ストレージ エンジンによってこの状況の処理方法が異なります。たとえば、MyISAM は行を異なるフラグメントに分割して保存しますが、InnoDB は行がページに収まるようにページを分割する必要があります。他のストレージ エンジンでは、データをその場で更新しない場合があります。 VARCHAR適用可能な状況VARCHAR は次の場合に適しています。
CHAR型CHAR 型は固定長です。MySQL は常に定義された文字列の長さに十分なスペースを割り当てます。 CHAR 値を保存する場合、MySQL は末尾のスペースをすべて削除します。 CHAR 値は、比較を容易にするために必要に応じてスペースが埋め込まれます。 CHAR は、非常に短い文字列を保存する場合、またはすべての値が同じ長さに近い場合に適しています。たとえば、CHAR は固定長の値であるため、パスワードの MD5 値を保存するのに非常に適しています。固定長の CHAR 型は断片化される可能性が低いため、頻繁に変更されるデータの場合、CHAR は VARCHAR よりも適しています。非常に短い列の場合、CHAR は VARCHAR よりもストレージ スペースの効率も高くなります。たとえば、YとNのみを含む値をCHAR(1)で格納する場合、シングルバイト文字セットであれば1バイトしか必要ありませんが、VARCHAR(1)ではレコード長に1バイト余分にあるため2バイト必要になります。 テスト次の例は、CHAR と VARCHAR の動作の違いを示しています。まず、CHAR(10) フィールドを 1 つだけ持つテーブルを作成し、そこにいくつかの値を挿入します。 テーブル char_test を作成する ( char_col CHAR(10) ); char_testに挿入 価値観 ('文字列1')。 (' 文字列2 ')。 ('文字列3'); これらの値を取得すると、string3 の末尾のスペースが切り捨てられていることがわかります。 SELECT CONCAT("'", char_col, "'") char_testから; 同じ値をVARCHAR(10)フィールドに保存すると、次の結果が得られます。 テーブルvarchar_testを作成する ( varchar_col VARCHAR(10) ); varchar_testに挿入 価値観 ('文字列1')。 (' 文字列2 ')。 ('文字列3'); SELECT CONCAT("'", varchar_col, "'") varchar_test から; 実行結果 VARCHAR(5)とVARCHAR(200)の違いVARCHAR(5)とVARCHAR(200)を使用して「hello」を保存すると、2つのスペースオーバーヘッドは同じであることがわかります。では、VARCHAR の長さを常に大きく保つことはできるのでしょうか?短い列を使用することに何か利点はありますか? 大きな利点があることがわかりました。 MySQL は通常、内部値を保持するために固定サイズのメモリ ブロックを割り当てるため、列が長くなるほどメモリ消費量が多くなります。これは、メモリ内の一時テーブルを並べ替えたり操作したりする場合に特に問題になります。ディスク一時テーブルを使用してソートする場合も同様に悪くなります。 したがって、最善の戦略は、本当に必要なスペースだけを割り当てることです。 要約する文字列フィールドの型を選択するときは、次の点を考慮して、VARCHAR と CHAR のどちらを選択するかを決定できます。
つまり、CHAR 型を選択できる場合、またはスペース消費が影響要因の比較的焦点ではない場合は、CHAR 型を選択するようにしてください。他の面では、CHAR 型には多かれ少なかれ利点があるためです。スペース消費が大きな要因となる場合は、VARCHAR 型の使用を検討します。 MySQL の varchar 型と char 型の違いに関するこの記事はこれで終わりです。MySQL の varchar 型と char 型の詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: CSS でホバー ドロップダウン メニューを実装する方法
>>: Vue はファジークエリを実装します - MySQL データベースデータ
インターネット上には多くのインポート方法があり、公式も3つのインポート方法を提供していますが、インポ...
1. オーバーフロー:非表示 オーバーフロー非表示要素に overflow:hidden が設定さ...
ビジネス シナリオ: vue + element ui の el-dialog を使用します。ポップ...
目次1. 概要2. Django プロジェクト3. Vueプロジェクト1. 概要プロジェクトで、ダウ...
HTML は、Baidu 百科事典のナビゲーション ドロップダウン メニュー機能を模倣します。具体的...
背景ご存知のとおり、nginx は高性能な Web サーバーであり、負荷分散やリバース プロキシによ...
目次プロジェクトにmockjsをインストールするVueプロジェクトでmockjsを使用する基本的なプ...
1. はじめに周知のように、データベース ミドルウェアの読み取り/書き込み分離のアプリケーション シ...
I. はじめに1: SSL証明書私のドメイン名は Tencent Cloud にあります。第 3 レ...
目次トランザクション分離レベル同時トランザクション実行中に発生した問題SQL標準の4つの分離レベルM...
CSSは複数のクラスにマッチする次の HTML タグ li、クラスはオープン スタイルです。私の要件...
1. レビューMySQL の起動後にバッファ プールが初期化されます。バッファ プールは N 個の空...
v-for タグにキーが追加されていない場合。 <!DOCTYPE html> <...
上の境界線のみを表示する <table frame=above>下の境界線のみを表示する...
目次序文2次元配列、一方向基本インターフェースのマッピング幅優先、包括的検索マップ編集経路探索アルゴ...