MySQLのCHAR型とVARCHAR型の違いを徹底解説
MySQLには文字列を格納するためのデータ型としてCHAR型とVARCHAR型があります。どちらも文字列データを扱う点では共通していますが、データの保存方法や取得方法に大きな違いがあります。本記事では、両者の主な相違点を比較表と実行例を使ってわかりやすく解説します。
CHAR型とは
CHAR型は固定長の文字列データ型です。指定した長さより短い値を保存すると、余った部分はスペースで埋められ(パディング)、常に指定された長さで保存されます。そのため、取り出す際には末尾のスペースが除去されて返されます。格納できるのは最大255文字です。
VARCHAR型とは
VARCHAR型は可変長の文字列データ型です。実際の値の長さに応じて必要な領域だけを使用し、値の前に1バイトまたは2バイトの長さ情報(プレフィックス)が付加されます。スペースによるパディングは一切行われません。格納できるのは最大65,535文字です。
CHAR型とVARCHAR型の比較表
| 項目 | CHAR型 | VARCHAR型 |
|---|---|---|
| 正式名称 | CHARACTER | VARIABLE CHARACTER |
| 保存方式 | 固定長。指定長に満たない場合はスペースでパディングされる | 可変長。1〜2バイトの長さプレフィックス付きで、パディングなし |
| 最大文字数 | 255文字 | 65,535文字 |
| メモリ割り当て | 静的メモリ割り当て | 動的メモリ割り当て |
実行例
CHAR型のカラムを持つテーブルを作成
mysql> CREATE TABLE emp(name CHAR(20)); Query OK, 0 rows affected (0.25 sec)
VARCHAR型のカラムを持つテーブルを作成
mysql> CREATE TABLE emp1(name VARCHAR(20)); Query OK, 0 rows affected (0.21 sec)
使い分けのポイント
郵便番号や固定コードのように必ず同じ長さになるデータにはCHAR型が適しており、検索性能の面でも有利です。一方、名前やメールアドレスなど長さが不定のデータにはVARCHAR型を使うことで、ストレージを無駄なく効率的に利用できます。
-
MySQLのTINYINT(1)とブール型(BOOLEAN)の違いとは?
結論から言うと、TINYINT(1)とブール型(BOOLEAN)の間に違いはありません。MySQLでは、BOOLまたはBOOLEANというキーワードは内部的にTINYINT(1)へと変換されます。つまり、BOOLやBOOLEANはTINYINT(1)の別名(シノニム)として扱われるのです。それでは、実際にテーブルを作成して確認してみましょう。BOOLEAN型でテーブルを作成するmysql> create table DemoTable ( isMarried Boolean ); Query OK, 0 rows affected (1.77 sec)次に、作成したテーブルの構造
-
MySQLにおける「!=NULL」と「IS NOT NULL」の違いとは?
MySQLでは、値を!=NULLと比較すると、結果は必ずNULLになります。つまり、!=NULLという比較は意味を持ちません。NULLは「不明な値」を表すため、通常の比較演算子では判定できないのです。NULL値を判定するには、専用の演算子であるIS NOT NULLを使用します。ここでは、!=NULLとIS NOT NULLの違いを実際に確認するために、まずテーブルを作成します。テーブルの作成まず、次のコマンドでテーブルを作成します。mysql> create table DemoTable1970 (