MySQL で char および varchar データ型を選択するための原則

黄舟
リリース: 2017-03-01 13:34:29
オリジナル
1657 人が閲覧しました


多くの場所で、char および varchar データ型選択の原則を分析するときに、ストレージ エンジンが無視されることがよくあります。実際には、選択したストレージ エンジンに基づいて、適切なデータ型を選択する方法を決定する必要があります。

Char と varchar の比較

value char(3) 実際に格納された文字の長さ varchar(3) 実際に格納された文字の長さ
" ' ' 3 1
'ab' 'ab' 3 'ab' 3
'abc' 'abc' 3 「ABC」 4
'abcdefg' 'abc' 3 'abc' 4

概要: 上の表からわかるように、char は固定長です。
Char は固定長型、varchar は非固定長型、varchar は可変長型です。なぜ varchar の長さがデータの長さよりも大きいのかと疑問に思う人もいるかもしれません。 VARCHAR は 1 バイトまたは 2 バイトの長さのプレフィックス + データで保存されるためです。 VARCHAR 列の宣言された長さが 255 より大きい場合、長さプレフィックスは 2 バイト、それ以外の場合は 1 バイトです。

MyISAM ストレージ エンジン

MyISAM データ テーブルでは、可変長データ列の代わりに固定長データ列を使用するのが最善です。

InnoDB ストレージ エンジン

は、VARCHAR 型の使用を推奨します。
InnoDB データ テーブルの場合、内部行ストレージ形式は固定長列と可変長列を区別しません (すべてのデータ行はデータ列値へのヘッド ポインターを使用します)。そのため、本質的には、固定長 CHAR 列を使用することが必ずしも良いとは限りません。可変長 VARCHAR 列を使用するよりも簡単です。したがって、主なパフォーマンス要因は、データ行によって使用されるストレージの総量です。 CHAR は VARCHAR よりも平均して多くのスペースを占有するため、処理する必要があるデータ行の合計ストレージとディスク I/O を最小限に抑えるには、VARCHAR を使用することをお勧めします。

MEMORY ストレージ エンジン

MEMORY データ テーブルは現在、固定長データ行ストレージを使用しているため、CHAR 列と VARCHAR 列のどちらを使用するかは関係ありません。どちらもCHAR型として扱われます。

誤解

1. utf-8 の中国語は 3 バイトを占有し、gbk は 2 バイトを占有することは誰もが知っています。では、varchar(20) は 20 バイト、つまり 6 つの漢字しか格納できないのですか?
回答: これは事実ではありません (5.0 より前のバージョンはこのようであるとオンラインで言われていますが、テストはありません)。 mysql varchar(20) は中国語と英語の両方で 20 を格納できますが、varchar フィールドの最大長はエンコーディングに関係しており、utf-8 の場合は約 65535/3、gbk の場合は約 65535/3 になります。は約 65535/2 です

多くの場所 char および varchar データ型の選択原則を分析するとき、ストレージ エンジンは無視されることがよくあります。実際には、選択したストレージ エンジンに基づいて、適切なデータ型を選択する方法を決定する必要があります。

上記は、MySQL における char および varchar データ型の選択原則の内容です。さらに関連する内容については、PHP 中国語 Web サイト (www.php.cn) に注目してください。


関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート