mysqlのcharとvarcharの違い

黄舟
リリース: 2017-09-07 13:12:41
オリジナル
1737 人が閲覧しました

mysql チュートリアルでは、char と varchar の違いは、どちらも文字列の格納に使用されることですが、char は固定長であるのに対し、varchar は可変長の文字型であるという点で、その格納方法が異なります。

char と varchar の違い

char (13) 'www.jb51.net' などの固定長には 12 文字の記憶域が必要です

varchar(13) 'www.jb51.net' などの可変長' には 13 文字のストレージスペースが必要です。

上記からわかるように、char の長さは固定されており、どれだけ多くのデータを保存しても、常に固定長になります。 Varchar は可変長ですが、位置を格納するために使用される全長に 1 文字を追加する必要があります。したがって、実際のアプリケーションでは、ユーザーは独自のデータ型に従ってそれを行うことができます。

char と varchar の速度の違いを見てみましょう。

コードは次のとおりです:

mysal>create tabe ab(v varchar(4),c char(4)); 
query ok ,0 rows affected(0.02 sec) 
mysql>insert into abc values('ab ','ab ') 
query ok ,1 row affected(0.00 sec); 
mysql->select concat(v ,'+') ,concat(c ,'+') form abc 
ab + | ab+ 
1rows in set (0.00 sec)
ログイン後にコピー


上記からもわかるように、charはなぜか固定長なので処理速度はvarcharよりもはるかに速いですが、ストレージ容量を消費するのでストレージは大きくありませんが、速度要件がある場合は、 char 型を使用できます。それ以外の場合は、varchar 型でインスタンス化できます。

注:

char 文字タイプを使用する場合、コンテンツの後ろにスペースがある場合は、関連する処理を実行する必要があります。そうでない場合、スペースは自動的に削除されます。

推奨事項:

myisam ストレージ エンジンは、可変長データ列の代わりに固定長データ列を使用することを推奨します。
メモリ ストレージ エンジンは現在固定データ行ストレージを使用しているため、char varchar 列を使用するかどうかは関係ありません
innodb ストレージ エンジンは varchar 型の使用を推奨します


以下は他のネチズンからの追加です

char は固定長型、varchar は可変長型です
char(M) 型のデータ列では、各値が M バイトを占めます。長さが M より小さい場合、MySQL はその右側にスペース文字を使用します。 。 (パディングスペース文字は検索操作中に削除されます。) varchar(M) タイプのデータ列では、各値はその長さを記録するのに十分なバイトと 1 バイトのみを占めます (つまり、合計の長さは L+1 バイトです) )。

列の型変換が必要かどうかを決定するためにMySQLで使用されるルール

1. データテーブルでは、各データ列の長さが固定されている場合、各データ行の長さも固定されます。
2. データテーブルに可変長のデータ列がある限り、各データ行の長さは可変になります。
3. あるデータテーブルのデータ行の長さが可変の場合、MySQL はストレージスペースを節約するために、データテーブルの固定長データ列を対応する可変長型に変換します。
例外: 長さが 4 文字未満の char データ列は varchar 型に変換されません

MyISAM テーブルの場合、特に頻繁に変更が必要で断片化しやすい myisam および isam データ テーブルの場合は、Char を使用するようにしてください。 欠点は、ディスク領域を占有することです;

InnoDB テーブルの場合、データ行の内部ストレージ形式が固定長データ行と可変長データ行を区別しないためです (すべてのデータ行はヘッダー部分を共有し、このヘッダー部分には関連するデータ列へのポインターが格納されるため、char 型の使用が varchar 型の使用より必ずしも優れているわけではありません。実際、char 型は通常、varchar 型よりも多くのスペースを占有するため、スペース使用量の削減とディスク I/O の削減の観点からは、varchar 型を使用する方が有益です。

記事 2:
文字は、最も一般的なデータベースの一種ですが、例えばOracleではvarchar2などがあるようです。ただし、MySQL は char と varchar に最も重点を置いているようです。
違いを教えてください。 Char は固定長ですが、varchar は特定の長さに応じて記憶領域を使用します。たとえば、char(255) と varchar(255) の場合、文字列「hello world」を格納する場合、char は 255 のスペースを使用して 11 文字を格納しますが、varchar は 255 を使用しません。最初に長さを計算し、次に長さを計算します。 11 に計算された文字列長情報 (通常は 1 ~ 2 バイト) を加えた値を使用します。これにより、varchar は不確実な長さを格納するときに記憶領域を大幅に削減します。

varchar は char よりもはるかに賢いようですが、char は便利ですか?まだまだ多くの利点があります。

まず、家番号 101、201 などの非常に短い情報を保存します。このような短い情報は char を使用する必要があります。これは、varchar も情報の長さを保存するのにバイトを必要とするためです。ストレージを節約するという本来の目的はありません。利益を得る価値があります。

2 番目、固定長。たとえば、uuid が主キーとして使用される場合は、char の方が適切です。固定長であるため、varchar の動的な長さベースの特性がなくなり、長さの情報も必要になります。

3 つ目は、列が非常に頻繁に変更されることです。 varchar が保存されるたびに、長さを取得するための追加の計算やその他の作業が必要になるため、これが頻繁に変更されると、char では不要な計算に多くのエネルギーが費やされます。


varchar に関するもう 1 つの質問は、varchar はストレージ領域に自動的に適応できるため、varchar(8) と varchar(255) のストレージは同じになるはずです。そのため、テーブルを設計するたびに、より大きな方向に進む必要があります。将来的にお金が足りなくなるというトラブルを避けてください。この考えは正しいでしょうか?答えは否定的です。 mysql はテーブル情報をメモリに置きます (最初のクエリの後、テーブル情報はキャッシュされます。これは Linux では明らかですが、Windows ではそうではないようです。この時点でメモリ アプリケーションが理由はわかりません)。 varchar が大きい場合は、固定長に基づいています。したがって、引き続きオンデマンドで要求する必要があります。

要約: DZ データテーブルを注意深く見てください。固定長フィールドは基本的に依然として char を使用しています。

以上がmysqlのcharとvarcharの違いの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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