MySQLでのchar、varchar(10)、varchar(1000)の違い


カスタムディレクトリのタイトルをここに書きます
  • tips
  • MySQLのvarcharとcharの違い
  • varchar(100)とvarchar(1000)の違い
  • 参照
  • tips
    特に指定がない場合、本明細書で説明するストレージ領域とは、ディスク領域を占有することを意味する.
    MySQLのvarcharとcharの違い
    ストレージスペースchar(m)は固定長の文字列で、常にM文字の長さの空間を占有し、長さがMより小さい場合、MySQLはスペースで整列しますが、検索時にcharタイプの末尾のスペースは無視され、私たちが保存したものでも、MySQLが自分で整列したものでも構いません(ここは大きな穴です).varchar(m)は可変長の文字列であり、mは格納可能な最大長である文字数であり、自動的にスペースで揃えるのではなく、追加の1~2バイトで実際の長さを記録する.実際の長さが255以下の場合、追加で1バイトを使用して実際の長さを格納し、255以上の場合、追加で2バイトを使用します.
    更新時の追加操作charタイプは固定長であり、更新時に長さの変化は生じない.しかしvarcharの長さは可変であるため,更新時に長さが変化しやすいため,varcharの長さバイトを同時に更新する必要がある.元のストレージロケーションがストレージの要件を満たすことができない場合は、システムが追加の操作を行う必要があります.ストレージエンジンによっては分割メカニズムが採用されるものもあれば、ページングメカニズムが採用されるものもあります.
    スペースフラグメントchar文字型を使用する場合、ストレージスペースは一括して割り当てられます.このフィールドの内容は、すべて一緒に格納されます.この角度から言えば、破片の悩みは存在しない.可変長の文字データ型で、格納されている長さは可変です.変更前後のデータ長が一致せず、頻繁に削除されると、フラグメントの問題が発生することは避けられません.したがって、可変長の文字型データを使用する場合、データベース管理者は時々フラグメントを整理します.optimize tableが実行されると、破片が除去される.
    varchar(100)とvarchar(1000)の違い
    多くの人はvarcharの空間が実際に使用されている以上、varchar(100)はvarchar(1000)と同じで、フィールドの長さを直接大きく設定すればいいと思っています.ただし、実際にはそうではありません.varchar(100)は実際の長さを1バイト余分に占有し、varchar(1000)は2バイトを占有するほか、メモリ操作やインデックス操作でも異なります.メモリ操作varcharデータ型では、ハードディスク(HDD)上のストレージ領域は、実際の文字長に基づいてストレージ領域を割り当てるが、メモリではそうではない.実際には、固定サイズのメモリブロックを使用して値を保存します.簡単に言えば、文字タイプで定義された長さ、すなわち1000文字空間を使用します.これは、ソートまたはテンポラリ・テーブル(これらのコンテンツはメモリで実現する必要がある)のジョブに大きな不利な影響を及ぼすことは明らかです.varchar(100)とvarchar(1000)のタイプを仮定すると、実際に90文字保存され、ストレージ側に影響を与えません(実際にハードディスクを占有しているのと同じです).ただし、MySqlがテンポラリ・テーブル(SORT,ORDERなど)を作成するとvarcharがcharに変換され、変換後のcharの長さがvarcharの長さになり、メモリ内の空間が大きくなり、ソート、統計時にスキャンが必要になるほど時間が長くなるため、クエリに影響を与えることは確かです.したがって、一部のフィールドがファイルのソートやディスクベースのテンポラリ・テーブルに関連する場合、varcharデータ型を割り当てるときは、あまり寛大ではありません.実際に必要な長さを評価し、最も長いフィールドを選択して文字の長さを設定します.冗長性を考慮すれば、10%程度の文字長を残すことができます.実際の長さに応じて記憶空間を割り当てるために勝手に長さを割り当てる、あるいはいっそ最大の文字長を使うとは考えられない.
    インデックス角度MySQLインデックス作成時にインデックスのサイズが制限されていないと仮定すると、インデックス長はデフォルトで使用されます.すなわちvarchar(1000)のインデックスはvarchar(100)より大きい.
    リファレンス
  • MySQLデータベースにおけるCHARとVARCHARの争い
  • MySQLテーブルフラグメント化の原因
  • mysqlのvarcharがどれだけ漢字、数字を保存できるか、varchar(100)とvarchar(10)の違い
  • を理解する文章
  • MySQLで使用されるタイプvarchar(20)とvarchar(255)のパフォーマンスへの影響