🔰 はじめに
SQLの勉強を始めると最初に出てくる「型」の話。 特に CHAR と VARCHAR。 「固定長」とか「可変長」とか、難しい言葉で説明されてもなかなかイメージしにくく覚えにくいため、僕なりに「こういうことか!」と納得したイメージをまとめてみました。
🔑 Cue(今回の疑問)
- CHARとVARCHARって結局どう使い分けるの?
- どっちを使っても同じじゃないの?
📝 Notes(学習内容)
1. CHARとVARCHARの共通点
- 文字列専用の型
- (n)最大文字数(またはバイト数)を指定すること
- (n)を超えたらエラーとなる
2. CHARとVARCHARの違い
一言で言うと、用意した領域にデータを合わせるか、領域がデータに合わせるかの違い。
| 型 | 性質 | 特徴 |
|---|---|---|
| CHAR | 固定長 | 領域(n) > データの場合、空白を入れて領域分ぴったり使用する |
| VARCHAR | 可変長 | 領域(n) > データの場合、 データ分の領域が使用される |
具体例:10文字分(10)の領域に「abc」を入れた場合
-
CHAR(10) の場合
- データの後ろに空白が入り、強制的に10文字分使われる。
- イメージ:
'abc□□□□□□□'(後ろに7つ空白が入る)
-
VARCHAR(10) の場合
- データが3文字なら、3文字分の領域しか使わない。
- イメージ:
'abc'
💡 結局どう使い分けるの?
**「入れるデータの長さが一定かどうか」**で判断する。
1. CHAR(n) を使うべきケース
**「入れるデータの長さが、ほぼ全て同じ」**な場合に使用する。
あらかじめサイズが決まっていると、DB側の管理コストが減り、処理がわずかに速くなることがある。
-
都道府県コード:
01,13,47(常に2文字) -
フラグ:
Y,N(常に1文字) - 固定長のID: 社員番号が必ず8桁と決まっている、など
- ハッシュ化されたパスワード: 特定のアルゴリズムなら常に64文字、など
2. VARCHAR(n) を使うべきケース
**「人によってデータの長さがバラバラ」**な場合に使用する。
無駄な空白を使わないため、ストレージ(容量)の節約になる。
- 名前: 「田中」さんもいれば「寿限無…」さんもいる。
- メールアドレス: 非常に短いものから長いものまで様々。
- ブログのタイトル: 10文字〜100文字など振れ幅が大きい。
✅ Summary(まとめ)
- CHAR は「ピッタリ同じ長さ」のデータに使う(例:コード類)。
- VARCHAR は「バラバラな長さ」のデータに使う(例:名前、文章)。