[SQL/情報処理]SQL CHAR と VARCHAR の違い、使い分け

SQL の CHAR と VARCHAR の違いについてです。
その前に、前提知識から確認していきましょう。


読み方

究極のところどっちでもいいのですが、個人的には

CHAR…キャラ
VARCHAR…バーキャラ

と呼んだほうが良いと思います。CHARはチャーと呼んでもいいですが、その場合、VARCHARがバー・チャーとなるのでちょっと間抜けな響きになります。

 

ちなみに語源はこちら
CHAR … CHARACTER →文字型
VARCHAR … VARIABLE CHARACTER →可変長文字型


まず、共通のこと

カッコ内はバイト数を記入します。終端文字(C言語のNULLみたいなもの)は不要です。
 

CHAR(バイト数)
VARCHAR(バイト数)

ここは文字数ではないので注意。

近代的なプログラミング言語はたいてい文字数ですよね。でもSQLは古いものなのでバイト数になってます。半角英数字なんかはアスキーコードなので1文字1バイトです。

日本語の扱い

古いSQLの本には、以下のようにあります。
全角文字を格納するには2バイト必要。
100文字の全角文字を格納するには、100 x 2で CHAR(200)とする。
これは日本語=2バイト文字という古い時代の考え方です。SJIS(Shift-JIS)なんかがそうですね。
今は、UNICODE(UTF-8等)を利用することが多いため、1文字=3バイトの場合もあります。
(このあたりは処理系によって異なります。DB全体の設定、もしくはテーブル作成時に文字コードを指定します。)
上記の例だと100文字の全角文字を保存する場合は、UNICODEの処理系だとCHAR(300)になります。

メモ

このあたりの問題があるため、情報処理試験ではCHAR/VARCHARに日本語を入れる問題は出てきません。

本題。CHARとVARCHARの違い

CHARは100文字確保したところに1文字しか入れてなくてもDBのスペースを100バイト消費します。
 
VARCHARは可変的にスペースを変動させるため、VARCHAR(100)に1文字しか入れない場合、1バイトしか消費しません。逆に言うと99バイト節約できます。
 

使い分け

CHAR を使うべきところ
桁が固定されたIDなど。電話番号や郵便番号などもコードと言える。
コード設計されたような文字列。

 

VARCHARを使うべきところ。
コード以外。桁が固定されていない文字列、たとえばちょっとしたメモ、備考など。文章に近いものがこちら。表題、タイトル、概要。
※日本の人名くらいだとCHARで許される気がするが、国際対応する場合は100バイトを超えることもあるので、VARCHARが使われる。
 

注意 VARCHARは可変長文字列ではない

VARCHAR(100)として、101文字の文字列を入れるとエラーが出ます。自動的にサイズが大きくなる型ではありません。
このような、何桁になるか分からない長い文字列を入れる型はTEXT型などと呼ばれます。VARIABLEという言葉に惑わされないでください。
 

メモ

会社によっては、CHARを使わずに、VARCHARで統一されているところもあります。事前に確認しましょう。
 
また、VARCHARよりも、CHARの方が若干速度が速いという情報もあります。サイズ変更処理が行われませんからね。ただ、そんなのは微々たるものです。VARCHARによるデータ容量の削減のほうがメリットが多いと思います。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です