MJySQL VARCHARとCHAR

5630 ワード

一、VARCHARとCHAR文字型データの違いMySQLデータベースの中で、最も多く使われている文字型データ型はVarcharとCharで、この2つのデータ型はいずれも文字型データを格納するために使われているが、構造から見てもデータの保存方式から見ても、両者の差は大きい.また、その具体的な実現方式は、ストレージエンジンにも依存している.ここでは、皆さんが最もよく使うMYISAMストレージエンジンを例に、この2つのデータ型の違いについてお話しします.次の推奨事項では、このようなストレージタイプについても説明します.Varcharは、可変長の文字列を保存するために使用されることが多い.簡単に言えば、最大値を固定しただけで、実際に格納されているデータ量に応じて適切なストレージスペースが割り当てられます.このため、CHAR文字データに比べて、固定長タイプよりも記憶領域を少なくすることができる.通常、VARCHARデータ型はディスク容量を節約できるため、データベースのパフォーマンスを向上させることができると考えられています.しかし、ここで注意しなければならないのは、これは往々にして両刃の剣である.パフォーマンスを向上させると同時に、副作用も生じることが多い.長さが可変であるため、データの更新時に追加の作業が発生する可能性があります.変更前に文字長が10ビットである場合(Varcharで規定されている最長文字数は50ビットであると仮定)、システムは10個の格納場所のみを割り当てる(システム自体のオーバーヘッドを考慮しないと仮定する).変更後、データ量は20ビットに達しました.最大50ビットを超える制限はないため、このデータベースは格納できます.ただし、元のストレージロケーションでは、ストレージの要件を満たすことはできません.この場合、システムは追加の操作を行う必要があります.ストレージエンジンによっては分割メカニズムが採用されるものもあれば、ページングメカニズムが採用されるものもあります.CHARデータ型はVARCHARデータ型とは異なり、固定長の記憶方式を採用している.簡単に言えば、システムは常に最大のストレージスペースを割り当てます.データが保存されると、最大の長さに達しなくても、システムはこれだけのストレージスペースを割り当てます.このストレージ方式は、ディスク領域の浪費をもたらすことは明らかです.ここで筆者が注意しなければならないのは,文字数が不足している場合,システムがスペースを用いて埋め込まないことである.逆に、CHAR値を保存するときに、その後ろに空の値がある場合は、スペースも自動的にフィルタされます.データ比較では、文字列の末尾にスペースが埋め込まれます.
  ,VARCHAR CHAR           ,              ,         。    ,                       。               ,    CHAR            。      CHAR       VARCHAR  ?    。    ,       CHAR     。  VARCHAR            ,         。                 ,            。        ,      Char    。

 、    

!、文字の長さから判断すると、その長さが近いかどうかを考慮してcharを選択するかvarcharを選択するか、どのようにフィールドの長さが基本的に同じか、あるいはその長さが常に近似しているかを判断するにはchar 2を選択し、フラグメントの角度から可変長さの文字型データを考慮する場合、データベース管理者は時々フラグメントを整理しなければならない.データベースエクスポートインポートジョブを実行すると、フラグメントが除去されます.2、Varcharデータ型を使っても、あまり気前よくできません!例えば90文字までしか使っていませんが、VARCHAR(100)とVARCHAR(200)は本当に同じですか?結果は否定的だ.90文字のデータを格納するために使用されますが、格納スペースは同じです.しかし、メモリの消費量は異なります.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1.varcharタイプの変化MySQLデータベースのvarcharタイプは4.1以下のバージョンで最大長さ255に制限され、そのデータ範囲は0~255または1~255(異なるバージョンのデータベースによって異なる)であってもよい.MySQL 5.0以上のバージョンでは、varcharデータ型の長さは65535にサポートされています.つまり、65532バイトのデータを格納することができ、開始ビットと終了ビットが3バイトを占めています.つまり、4.1以降のバージョンでは固定TEXTまたはBLOB形式で格納する必要があるデータは、可変長のvarcharで格納することができます.これにより、データベース・ファイルのサイズを効果的に削減できます.
MySQLデータベースのvarcharタイプ4.1以下のバージョンでは、nvarchar(Unicodeデータ型の文字が格納されている)は、1文字でも漢字でも2バイト保存され、一般的に中国語や他の言語入力として使用され、文字化けしにくい.varchar:漢字は2バイトで、他の文字は1バイトとして保存され、varcharは英語と数字を入力するのに適しています.
4.0バージョン以下、varchar(20)は、20バイトを指し、UTF 8漢字を格納する場合、6個(漢字1文字あたり3バイト)しか保存できません.5.0バージョン以上、varchar(20)とは、20文字を指し、数字、アルファベット、UTF 8漢字(漢字1文字あたり3バイト)を格納しても20文字を格納でき、最大サイズは65532バイトである.varchar(20)はMysql 4の中でも最大20バイトに過ぎないが、Mysql 5は符号化によって記憶サイズが異なり、具体的には以下のルールがある.
a)ストレージ制限
varcharフィールドは、実際のコンテンツをクラスタインデックス以外に個別に格納し、コンテンツの先頭に実際の長さ(255を超えると2バイト必要)を1~2バイトで表すため、最大長は65535を超えてはいけません.
b)符号化長制限
文字タイプがgbkの場合、各文字は最大2バイトを占め、最大長は32766を超えてはならない.
文字タイプがutf 8の場合、各文字は最大3バイトを占め、最大長は21845を超えてはならない.
定義時に上記の制限を超えるとvarcharフィールドは強制的にtextタイプに変換されwarningが生成されます.
c)行長制限
実際のアプリケーションでvarchar長が制限されるのは、行定義の長さです.MySQLでは、1行の定義長さが65535を超えてはいけません.定義されたテーブルの長さがこの値を超えると、ヒント
ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. You have to change some columns to TEXT or BLOBs.
2.CHAR(M)、VARCHR(M)の違いCHAR(M)で定義される列の長さは一定であり、Mの値は0~255の間であり、CHAR値を保存するとき、その右側にスペースを埋めて指定の長さにする.CHAR値を取得すると、末尾のスペースが削除されます.ストレージまたは取得中に大文字と小文字の変換は行われません.CHARは定長データを格納するのに便利で、CHARフィールドのインデックス効率レベルが高く、例えばchar(10)を定義すると、格納したデータが10バイトに達したかどうかにかかわらず、10バイトの空間を占め、不足した自動はスペースで埋め込まれます.
VARCHAR(M)で定義される列の長さは可変長文字列であり、M値は0~65535の間であってもよい(VARCHARの最大有効長は最大行サイズと使用する文字セットで決定される.全体の最大長は65532バイト).VARCHAR値の保存に必要な文字数のみを保存し、長さを記録するために1バイト追加します(カラム宣言の長さが255を超える場合は2バイト使用します).VARCHAR値保存時にパディングしない.値が保存され、取得されると、末尾のスペースは保持され、標準SQLに準拠します.varcharは長くなったデータを格納するが,格納効率はCHARほど高くない.フィールドの可能な値が一定長でない場合、10文字を超えることはできないことを知っています.VARCHAR(10)として定義するのが最もお得です.VARCHARタイプの実際の長さは、その値の実際の長さ+1である.なぜ「+1」なのか.このバイトは、実際に使用された長さを保存するために使用されます.空間的にはvarcharが適当です.効率的にはcharが適切であり,実際の状況に基づいてトレードオフポイントを見つけることが肝心である.
CHARとVARCHARの最大の違いは、固定長さであり、可変長さである.可変長であるため、実際に格納する場合は、実際の文字列に1つの記録文字列の長さを加えたバイト(255を超えると2バイト必要)である.CHARまたはVARCHARカラムに割り当てられた値がカラムの最大長を超える場合、値は適切に切り捨てられます.カットされた文字がスペースでない場合、警告が発生します.スペース以外の文字を切り取ると、警告ではなくエラーが発生し、厳格なSQLモードを使用して値の挿入を無効にします.
  • VARCHARとTEXT、BlOBタイプの違いVARCHARは、BLOBとTEXTタイプが長くなるタイプであり、その格納要件は、タイプの最大可能サイズではなく、カラム値の実際の長さ(前の表ではLで表される)に依存する.例えば、1つのVARCHAR(10)列は最大10文字の1文字列を保存することができ、実際の記憶には文字列の長さであり、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最長は64 kであるが,ここでの64 kはrow全体の長さであることに注意し,他のcolumnを考慮すると,not nullが存在する場合も1ビットを占有し,utf 8のように異なる文字セットに対して有効長さは異なり,最大21845であり,他のcolumnを除去しなければならない.しかしvarcharは一般的にストレージで十分です.大きなテキストに出会ったらtextを使うことを考えて、最大4 Gまでできます.
    効率的には基本的にchar>varchar>textですが、Innodbエンジンを使用している場合は、charの代わりにvarcharを使用することをお勧めします
    charとvarcharにはデフォルト値があり、textではデフォルト値を指定できません.
    データベースが適切なデータ型ストレージを選択する必要があり、パフォーマンスに影響を与えます.ここでは、intタイプの場合、負の値にアクセスする必要がない場合はunsignedを加えたほうがいい.where文によく表示されるフィールドでは、インデックス付けを考慮すると、整形は特にインデックス付けに適しています.