0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【SQL入門】CHAR型とVARCHAR型の違いをスッキリ理解する

0
Last updated at Posted at 2026-05-19

オブジェクティブグループの@bachiuekiです!
弊社では月に1回社内講習会を開いており、自分はSQL講習を担当しております。

今回はSQLでテーブルを設計する際、文字列を扱うデータ型として必ずと言っていいほど登場するCHAR型とVARCHAR型のお話です。
「なんとなくVARCHARを使っている」「どっちを使えばいいか迷う」という方も多いのではないでしょうか?

この記事では、この2つの型の違いと、それぞれの適切な使い分けについて分かりやすく解説します。

何が違うのか?

一言で言うと、「確保するデータ容量が固定か、変動するか」が最大の違いです。

  • CHAR型: 固定長文字列(指定したサイズ分、常に容量を確保する)
  • VARCHAR型: 可変長文字列(実際の文字数に合わせて容量が変わる)

それぞれの特徴を詳しく見ていきましょう。

CHAR型(固定長文字列)とは?

CHAR(n) は、常に n 文字分(またはバイト分)の記憶領域を確保するデータ型です。
※ n が文字数単位かバイト数単位かはRDBMSや設定によって異なります。

例えば、CHAR(10) のカラムに「SQL」という3文字のデータを保存した場合、残りの7文字分には自動的に半角スペース(パディング)が埋められて保存されます。

メリット

  • 処理速度が速い: データサイズが常に一定であるため、データベースエンジンがデータの保存位置を計算しやすく、検索や更新のパフォーマンスが高い傾向があります。
  • フラグメンテーション(断片化)が起きにくい: データ更新時にサイズが変わらないため、ディスク上の配置が綺麗に保たれます。

デメリット

  • ストレージの無駄遣い: 保存する文字数が指定サイズより短い場合でも、最大サイズ分の容量を消費してしまいます。

VARCHAR型(可変長文字列)とは?

VARCHAR(n) は、実際に保存する文字数(+データ長を管理するわずかな領域)だけを消費するデータ型です。

例えば、VARCHAR(10) のカラムに「SQL」という3文字を保存した場合、消費されるのは「3文字分のデータ」と「文字数(3)を記録するための1〜2バイト」のみです。

メリット

  • ストレージ効率が良い: 無駄なスペースを使わないため、長さにばらつきのあるデータ(名前、メールアドレス、住所など)を保存するのに最適です。

デメリット

  • パフォーマンスの微小なオーバーヘッド: データの長さを毎回計算・記録する必要があるため、CHAR型に比べるとわずかに処理コストがかかります(ただし、現代のRDBMSではほとんど気にならないレベルです)。
  • 更新時の断片化: 後から文字数が多いデータに更新(UPDATE)された場合、元の領域に収まりきらず、ディスク上でデータが断片化する可能性があります。

CHARとVARCHARの比較まとめ

特徴 CHAR型 VARCHAR型
長さ 固定(Fixed-length) 可変(Variable-length)
余った領域 スペースで埋められる 実際のデータ長分のみ使用
ストレージ効率 悪い(常に最大サイズを消費) 良い(実際のデータ分だけ消費)
処理速度 速い(計算がシンプル) 普通(データ長の計算が入る)
更新時の断片化 起きにくい 起きる可能性がある

ケースごとの使い分け

実際のデータベース設計では、以下のように使い分けるのが一般的です。

CHAR型を使うべきケース

文字数が常に一定のデータ」に使用します。

  • 国コード(例: JP, USCHAR(2)
  • 郵便番号(例: 1000001CHAR(7) ※ハイフンなしの場合)
  • フラグ・ステータス(例: 0, 1, Y, NCHAR(1)
  • ハッシュ値(例: MD5やSHA-256などで生成された固定長の文字列)

VARCHAR型を使うべきケース

文字数が変動するデータ」や「長文になる可能性があるデータ」に使用します。

  • 氏名(人によって文字数がバラバラ)
  • メールアドレス
  • 住所
  • 備考・コメント

💡 ワンポイントアドバイス
迷った場合は、基本的にVARCHAR型を選択しておけば、ストレージの無駄を防ぐことができるため無難です。現代のデータベースでは、VARCHARのパフォーマンス低下は極めて小さく最適化されています。


おわりに

いかがでしたでしょうか?
CHAR型とVARCHAR型の違いを理解して、データの性質に合わせた適切なテーブル設計を心がけましょう!

この記事が、SQLを学ぶ皆さんの参考になれば幸いです。


オブジェクティブグループではXの投稿も平日毎日行っています!
IT 関連の小ネタや便利技から、日常のアニメ・ゲーム布教なども幅広く投稿してるので、
ご興味のある方は是非フォロー・いいねをお願いします。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?