web-dev-qa-db-ja.com

MySQLのvarcharに255以外の長さを選択する必要があるのはなぜですか?

CHARとVARCHARの違いを知っています。

CHAR-固定長

VARCHAR-可変長(サイズ+ 1バイト)

しかし、私はvarcharの長さのオプションを持つことの目的は何かを知りたいと思っていました。 VARCHAR(50)VARCHAR(100)VARCHAR(255)

使用される実際のスペースはデータベースに格納されている値に依存するため、これは無意味なようです。

だから私の質問は:

1)すべてのvarcharを255に設定しても構いません2)他の長さを指定したいのはなぜですか?

36
Lizard

1)格納されたvarcharの最大サイズを制限したくない場合は、それで問題ありません。それは言われています...

2)多くの場合、varcharのサイズの上限を設定します。メーリングリストを保存しており、住所行に使用できるスペースが限られているとします。住所フィールドに上限を設定することにより、データベースが住所行の最大長を強制できるようになりました。

21
MarkD

MySQLドキュメント からの抜粋:

CHAR型とVARCHAR型は似ていますが、格納および取得の方法が異なります。 MySQL 5.0.3の時点では、最大長および末尾のスペースが保持されるかどうかも異なります。

CHAR型とVARCHAR型は、格納する最大文字数を示す長さで宣言されます。たとえば、CHAR(30)は最大30文字を保持できます。

CHAR列の長さは、テーブルの作成時に宣言した長さに固定されます。長さは0〜255の任意の値にできます。CHAR値が格納されると、指定された長さになるまで右詰めされます。 CHAR値が取得されると、末尾のスペースが削除されます。

VARCHAR列の値は可変長文字列です。長さは、MySQL 5.0.3より前の0〜255、および5.0.3以降のバージョンでは0〜65,535の値として指定できます。 MySQL 5.0.3以降のVARCHARの有効な最大長は、最大行サイズ(65,535バイト、すべての列で共有)および使用される文字セットに依存します。

CHARとは対照的に、VARCHAR値は1バイトまたは2バイトの長さのプレフィックスとデータとして保存されます。長さのプレフィックスは、値のバイト数を示します。値が255バイトを超える必要がない場合、列は1バイトを使用し、値が255バイトを超える場合は2バイトを使用します。

19
Jauzsika

CHAR Vs VARCHAR

CHARは、固定長サイズ変数に使用されます。
VARCHARは、可変長サイズ変数に使用されます。

例えば。

create table emp
(f_name CHAR(20),
 l_name VARCHAR(20)
);

insert into emp values('Suraj','Chandak');

select length(f_name), length(l_name) from emp;

Output will be

length(f_name)          Length(l_name)
   20                       7

CHAR vs VARCHAR のベストアンサー

編集

  • 列の最大上限を設定できます。
  • パフォーマンスとストレージが影響する場合があります。

ありがとう。

4
Aniket Kulkarni

固定長(静的)テーブルは高速です。テーブルのすべての列が「固定長」である場合、テーブルも「static」またはと見なされます「固定長」。固定長ではない列タイプの例:VARCHAR、TEXT、BLOB。

http://net.tutsplus.com/tutorials/other/top-20-mysql-best-practices/

したがって、テーブルにvarchar、text、またはblobである他のフィールドがない場合。 charを使用して、テーブルを静的なものにすることができます。そうすれば彼らはより速くなります。

3
musafar006

しかし、私はvarcharの長さのオプションを持つことの目的は何かを知りたいと思っていました。 VARCHAR(50)、VARCHAR(100)、VARCHAR(255)

使用される実際のスペースはデータベースに格納されている値に依存するため、これは無意味なようです。

指定するVARCHAR(500)の代わりにVARCHAR(5)を使用すると、場合によってはパフォーマンスが向上します。メモリ内の一時テーブルを使用する操作の場合。

別のケースは、ドメインの要件を補完するために列の長さを制限することです(値が最大値を超えてはならない場合。例:DNSの完全なドメイン名は253文字の長さを超えてはなりません)

1

1)技術的には問題ありません。フィールドは最初は1または2バイトの長さで作成されるためです。その後、必要に応じて成長します。

2)とはいえ、良い設計原則では、フィールド長を適切に設定することをお勧めします。a)誰かがテーブルスキームを調べて、特定のフィールドに格納されているデータ量を計算しようとすると、特定のフィールドの保持量が少なくなることがわかりますb)挿入時にVARCHAR(255)よりもVARCHAR(10)フィールドのスペースを少なくする必要があるため、データベースエンジンによって行われる少量の余分な作業を防ぐことができます。

詳細については、こちらをご覧ください。

http://dev.mysql.com/doc/refman/5.0/en/char.html

1
user174624

私は、varcharがcharに対して定義された列に対してselectを実行すると、charに比べてパフォーマンスが低下することを読んでいます。したがって、フィールドが常に特定の長さであることが確実であり、パフォーマンスの問題がある場合は、charを選択することをお勧めします...

1
Greg Gauthier

これら2つの値タイプの主な違いは、文字列間の比較を行うときに発生します。

長さが事前定義されているCHAR列では、列の長さ全体にわたって「実行」する必要がありますが、VARCHAR列では、列の長さではなく、値の長さ全体にわたって「実行」する必要があります。ほとんどの場合、はるかに高速です。

したがって、フィールド長よりも短い値の長さは、VARCHARフィールドに格納されている場合、より速く比較されます。

1
Alon Kogan

1)はい。

2)歴史的に、これはパフォーマンスの低下でした。

本当に重要ではない証拠として、すべてをテキストとして保存するsqliteなどのデータベースを見てください。

0
Toby Allen