重複の可能性:
MySQLテーブルでのvarcharの長さの重要性
VARCHARを使用する場合(これが短い文字列の正しいデータ型であると想定)、サイズは重要ですか? 20文字に設定した場合、占有するスペースは少なくなりますか、それとも255文字より速くなりますか?
一般に、VARCHARフィールドの場合、各フィールドに格納されるデータの量によって、最大サイズではなくディスク上のフットプリントが決まります(常に同じフットプリントを持つCHARフィールドとは異なります)。
900バイトのインデックスのすべてのフィールドに格納されるデータの合計には上限があります( 文字長の900バイトのインデックスサイズ制限 )。
フィールドを大きくすると、意図した目的以外の目的で使用しようとする可能性が高くなり、値を表示するために必要な画面領域が大きくなるため、rightサイズ。できるだけ大きくすると、デザインを再検討する手間が省けると想定するのではなく、.
はい、は、複数の列にインデックスを付けるときに問題になります。
プレフィックスの長さは最大1000バイトです(InnoDBテーブルの場合は767バイト)。プレフィックス制限はバイト単位で測定されますが、CREATETABLEステートメントのプレフィックス長は文字数として解釈されることに注意してください。マルチバイト文字セットを使用する列のプレフィックス長を指定するときは、これを必ず考慮してください。
ソース: http://dev.mysql.com/doc/refman/5.0/en/column-indexes.html
Latin1照合順序では、varchar(255)
の最大3列しか指定できません。varchar(20)
には最大50列を指定できます
間接的に、適切なインデックスがないと、クエリ速度が遅くなります
ストレージに関しては、違いはありませんが、
as varchar
はvariable-length strings
の略です
実際の違いは次のとおりです。
TINYTEXTおよびその他のTEXTフィールドは、MySQLヒープ内のメモリ内の行とは別に格納されますが、VARCHAR()フィールドは合計で最大64kの制限になります(したがって、TINYTEXTでは64kを超えることができますが、VARCHARでは使用できません)。
TINYTEXTおよびその他の「blobのような」フィールドは、SQLレイヤー(MySQL)が使用されるたびにディスク上の一時テーブルを使用するように強制しますが、VARCHARは引き続き「メモリ内で」ソートされます(ただし、全幅でCHARに変換されます) 。
InnoDBは、内部的にはtinytextかvarcharかを気にしません。検証、2つのテーブルの作成(1つはVARCHAR(255)、もう1つはTINYINT)、および両方へのレコードの挿入は非常に簡単です。どちらも単一の16kページを使用しますが、オーバーフローページが使用されている場合、TINYTEXTテーブルは「SHOWTABLESTATUS」で少なくとも32kを使用していると表示されます。
私は通常VARCHAR(255)を好みます-それらは単一行に対してあまり多くのヒープ断片化を引き起こさず、MySQL内のメモリ内の単一の64kオブジェクトとして扱うことができます。 InnoDBでは、サイズの違いはごくわずかです。
MySQLのドキュメント: http://dev.mysql.com/doc/refman/5.0/en/char.html
VARCHAR(4)のバイトを示すテーブルがあります(対CHAR(4))。
文字列のない単純なVARCHAR(4)、1バイトのみ。その場合、文字列のない単純なVARCHAR(255)は1バイトです。 'ab'のVARCHAR(4)は3バイトであり、 'ab'のVARCHAR(255)は3バイトです。それは同じですが、長さの制限があります:)
これはパフォーマンスには影響しません。この場合、制約はデータの整合性を確保するのに役立つだけです。
これ 答えはあなたを助けるはずです。
20に設定すると、最初の20文字のみが保存されます。そうです、255文字よりも少ないスペースで済みます:)。
VARCHAR
に必要なストレージスペースは次のとおりです。
VARCHAR(L)
、VARBINARY(L)
—L
+列の値に0〜255バイトが必要な場合は1バイト、L
+値に255を超える必要がある場合は2バイトバイト
したがって、VARCHAR
は、文字列用のスペースと、文字列の長さ用の1つまたは2つの追加バイトのみを必要とします。