MySQLvarcharデータ型の長さ制限と他の文字型の詳細の違い

 

char

固定長、最大255文字、末尾のスペースはデフォルトで削除されます

charタイプのストレージを選択するのはいつですか?

1データ長は、携帯電話番号IDのMD5暗号化後の値と同様です。

2 varcharに関連する短い文字列は、ストレージの長さのスペースを節約できます

3頻繁に更新されるフィールドは、varcharと比較して長さが変更されず、ストレージの断片化が生成されません

 

varchar

Varchar型は、可変長文字列のchar型とは異なります

文字長が255を超えない場合は、1バイトを使用して長さを格納します

255を超える場合は、2バイトを使用して長さを格納します

各行のvarcharの合計は65535バイトを超えてはなりません。より長い文字列を格納する場合は、テキスト形式を使用することをお勧めします。

varcharは可変長であり、255文字を超えない場合は1バイトを使用して長さを格納するため、「abcd」などの4文字のコンテンツを格納するときにvarchar(4)とvarchar(100)が完全であることを意味します。 ?

  MySQLは、ストレージ中の可変長幅の代わりに、クエリ時にメモリ内のvarcharフィールドに固定幅を使用します。特に、クエリ中に作成された非表示の一時テーブルであるため、ビジネスに応じてフィールド属性を選択して、最適なものを選択するのが適切です。クエリ速度を向上させ、データベースサーバーのオーバーヘッドを削減するためのの長さ

 

ストレージにvarchar列を選択するのはいつですか?

1弦の列の最大長は、平均の長さよりもはるかに長いです。可変長の特性を十分に活用してください。

2文字列列が更新されることはめったにありません。InnoDBエンジンのメモリページは16kであるため、可変長フィールドを頻繁に更新すると、メモリページの断片化によりメモリの断片化が発生する可能性があります。 

3utf-8などのマルチバイト文字セット 

1.Varcharタイプの変更

4.1より前のバージョンのMySQLデータベースのvarcharタイプの最大長は255に制限されており、データ範囲は0〜255または1〜255です(異なるバージョンのデータベースによって異なります)。MySQL 5.0以降では、varcharデータ型の長さは65535までサポートされています。つまり、65,532バイトのデータを格納でき、開始ビットと終了ビットは3バイトを占めます。つまり、4.1または次のデータです。固定のTEXTまたはBLOB形式で格納する必要があるバージョンは、可変長のvarcharに格納できます。これにより、データベースファイルのサイズを効果的に削減できます。

MySQLデータベースのvarcharタイプは4.1より前のバージョンであり、nvarchar(Unicodeデータタイプの文字を格納)は文字か中国語文字かを問わず、2バイトとして格納され、一般に中国語またはその他に使用されます。言語入力。文字化けしやすい; varchar:中国語の文字は2バイト、その他の文字は1バイトとして格納され、varcharは英語と数字の入力に適しています。

バージョン4.0より前では、varchar(20)は20バイトを参照します。UTF8中国語文字を格納する場合、格納できるのは6(中国語文字あたり3バイト)のみです。バージョン5.0より前では、varchar(20)は20文字を参照します。数字、文字、またはUTF8中国語文字(各中国語文字は3バイト)を格納し、20を格納でき、最大サイズは65532バイトです。varchar(20)はMysql4ではわずか20バイトですが、Mysql5のストレージサイズはさまざまです。エンコーディング。具体的なルールは次のとおりです。

a)ストレージの制限

varcharフィールドは、実際のコンテンツをクラスター化インデックスの外部に個別に格納します。コンテンツの先頭は、実際の長さを示すために1〜2バイトを使用するため(長さが255を超える場合は2バイトが必要です)、最大長は65535を超えることはできません。

b)エンコードの長さの制限

文字タイプがgbkの場合、各文字は最大2バイトを占有し、最大長は32766を超えることはできません。

文字タイプがutf8の場合、各文字は最大3バイトを占有し、最大長は21845を超えることはできません。

定義が上記の制限を超えると、varcharフィールドが強制的にテキストタイプに変換され、警告が生成されます。

c)線の長さの制限

実際のアプリケーションでvarcharの長さの制限を引き起こすのは、行定義の長さです。MySQLでは、定義された行の長さが65535を超えることはできません定義されたテーブルの長さがこの値を超えると、プロンプトが表示されます

エラー1118(42000):行サイズが大きすぎます。使用されるテーブルタイプの最大行サイズは、BLOBを除いて、65535です。一部の列をTEXTまたはBLOBに変更する必要があります。

2. CHAR(M)とVARCHAR(M)の違い

CHAR(M)で定義される列の長さは固定されています。Mの値は0から255の間です。CHAR値を保存するときは、指定された長さに達するように右側のスペースを埋めてください。CHAR値が取得されると、末尾のスペースが削除されます。保存中または取得中にケース変換は実行されません。CHARは、固定長データを格納するのに非常に便利です。CHARフィールドのインデックスは非常に効率的です。たとえば、char(10)を定義すると、格納するデータが10バイトに達するかどうかに関係なく、10バイトを使用します。不足しているスペースのスペースが自動的に埋められます。

VARCHAR(M)で定義される列の長さは、可変長の文字ストリングです。Mの値は0から65535までです(VARCHARの最大有効長は、最大行サイズと使用される文字セットによって決まります。全体の最大長は65,532ワードセクション)です。VARCHAR値を保存すると、必要な文字数だけが保存され、長さを記録するために1バイトが追加されます(列の宣言された長さが255を超える場合は、2バイトが使用されます)。VARCHAR値は保存時に入力されません。値が保存および取得されると、末尾のスペースが残ります。これは、標準SQLに準拠しています。Varcharは可変長データを格納しますが、格納効率はCHARほど高くありません。フィールドの可能な値が可変長である場合、10文字を超えることはできないことがわかっているだけであり、VARCHAR(10)として定義するのが最も費用効果が高いです。VARCHAR型の実際の長さは、その値の実際の長さ+1です。なぜ「+1」なのか?この1バイトは、実際に使用された長さを格納するために使用されます。スペースの観点からはvarcharが適切であり、効率の観点からはcharが適切です。重要なのは、実際の状況に基づいてトレードオフを見つけることです。

CHARとVARCHARの最大の違いは、一方が固定長で、もう一方が可変長であることです。長さが可変であるため、実際の文字列は実際に格納され、文字列の長さを記録するために1バイトが加算されます(255を超える場合は、2バイトが必要です)。CHARまたはVARCHAR列に割り当てられた値が列の最大長を超える場合、値は収まるようにクリップされます。トリミングされた文字がスペースでない場合、警告が生成されます。スペース以外の文字を切り抜くと、エラー(警告ではなく)が発生し、厳密なSQLモードを使用して値の挿入が無効になります。

3.VARCHARとTEXTおよびBloBタイプの違い

VARCHAR、BLOB、およびTEXTタイプは可変長タイプであり、それらのストレージ要件は、タイプの可能な最大サイズではなく、列値の実際の長さ(前の表でLで示されている)に依存します。たとえば、VARCHAR(10)列には、最大10文字の文字列を格納できます。実際の格納には、文字列の長さに1バイトを加えて、文字列の長さを記録する必要があります。文字列「abcd」の場合、Lは4で、ストレージ要件は5バイトです。

BLOBおよびTEXTタイプは、タイプの可能な最大長に応じて、列値の長さを記録するために1、2、3、または4バイトを必要とします。VARCHARは、最大65535バイトのサイズを定義する必要があります。TEXTはそれを必要としません。列タイプの最大長を超える値をBLOBまたはTEXT列に割り当てると、値はそれに合うように切り捨てられます。

BLOBは、可変量のデータを保持できる大きなバイナリオブジェクトです。4つのBLOBタイプTINYBLOB、BLOB、MEDIUMBLOB、およびLONGBLOBは、格納できる値の最大長のみが異なります。

BLOBは画像を保存できますが、TEXTは保存できません。TEXTはプレーンテキストファイルのみを保存できます。4つのTEXTタイプTINYTEXT、TEXT、MEDIUMTEXT、およびLONGTEXTは、4つのBLOBタイプに対応し、同じ最大長とストレージ要件を持っています。BLOBタイプとTEXTタイプの唯一の違いは、BLOB値の並べ替えと比較は大文字と小文字を区別する方法で実行されるのに対し、TEXT値は大文字と小文字を区別しないことです。つまり、TEXTは大文字と小文字を区別しないBLOBです。

4. char、varchar、textの違いを要約します

長さの違い、charの範囲は0〜255、varcharは最長の64kですが、ここでの64kは行全体の長さであり、他の列を考慮に入れてください。nullがない場合は、1ビットを占有します。 right異なる文字セットは、utf8、最大21845など、異なる有効長を持ち、他の列を削除する必要がありますが、一般に、varcharで十分です。大きなテキストに遭遇した場合は、最大4Gに達する可能性のあるテキストの使用を検討してください。

効率は基本的にchar> varchar> textですが、Innodbエンジンを使用している場合は、charの代わりにvarcharを使用することをお勧めします。

Charとvarcharはデフォルト値を持つことができ、テキストはデフォルト値を指定できません

データベースは、ストレージに適切なデータ型を選択する必要があります。これは、パフォーマンスに一定の影響を及ぼします。これが2つのシステムレコードです。int型の場合、負の値にアクセスする必要がない場合は、unsignedを追加するのが最適です。whereステートメントに頻繁に表示されるフィールドの場合は、インデックスの追加を検討してください。シェーピングは、インデックスの追加に特に適しています。 。

おすすめ

転載: blog.csdn.net/JineD/article/details/111875719