かなめのロジック

フリーSEの雑記ブログ。ORACLEやPostgreSQL、情報セキュリティ、金融について主に書いています。

文字列型のCHARとVARCHAR2の違い

time 2016/03/22

文字列型のCHARとVARCHAR2の違い

ORACLEの文字列型を格納するデータ型は、CHARとVARCHAR2があります。
この2つの型の違いについて、本記事では解説していきます。

sponsored link

CHAR型は2000バイトまで、VARCHAR2は4000バイトまで

CHAR型は1~2000バイトまでの列長を指定することが出来ます。

一方VARCHAR2型は、1~4000バイトまでの列長を指定することが出来ます。

CHAR型は固定長、VARCHAR2は可変長

CHAR型が固定長であるのに対して、VARCHAR2は可変長という違いがあります。

CHAR型は、列長よりも短い値を入れようとした場合、後ろに半角スペースを補って列長を揃えて挿入されます。

VARCHAR2型は、列長よりも短い値を入れようとした場合でも、そのままの値で挿入されます。

CHAR型とVARCHAR2の使い分け

CHAR型は、コードやフラグなど格納データの長さが決まっている項目に使用する事が多いです。
しかし、長さが決まっているならCHAR型もVARCHAR2も差異がないので、どちらを使用してもよいと考えます。

一方VARCHAR2は、名前や住所など格納データの異なるデータの長さが異なる項目に使用する事が多いです。
これにはメリットとデメリットがあります。

メリットは、データの格納効率という点です。
VARCHAR2だと、格納しようとしたデータ長に必要な領域のみを確保します。
一方のCHAR型だと、半角スペースを補ってデータ格納するので必要な領域が膨らみます。
データ長に大幅に満たないデータが多い場合、必要な領域に結構差異が出て、検索スピードに影響が出ることも考えられます。

デメリットは、更新前と比較して長い値で更新しようとし、格納しているブロックに収まらない場合、別のブロックにデータを格納してしまうことがあります。(行移行)
それが多発すると、検索の時間が延びたりといった影響が出ます。
解消するには、断片化の解消作業(export&importなど)が必要です。

また、CHAR型をデータの長さが異なる項目に使用する場合、不足を半角スペースで補ってしまうため、他システムに連携する際に後ろスペースを削る処理が必要となることが考えられます。
その際、元々のデータに後ろスペースが入っていた場合に、区別できないという問題もあります。

それぞれ使用には注意が必要なことがあるので、ぜひ覚えておきましょう。

【おまけ】VARCHAR2の2って何?

VARCHAR2の2ってなんでしょうか。私もずっと疑問に思っていたので、今回少し調べてみました。

どうやら、ORACLE8iの際に、254バイト以下の可変長文字列のVARCHAR型を、4000バイト以下の可変長文字列をVARCHAR2型に拡張したということのようです。

今では、VARCHARで宣言しようとしても、ORACLE内部で自動でVARCHAR2に変換されます。

まとめ

ORACLEの文字列型、CHARとVARCHAR2の違いについて見てきました。
特に、固定長か可変長という点は大きな違いです。
使い方にも違いがあり、メリットやデメリットがあるので、合わせて覚えておきましょう。

sponsored link

管理人

かなめ

フリーの業務系システムエンジニア。情報処理安全確保支援士。 ORACLEと金融と子育ての狭間で、元気に楽しくやってます。 [詳細]

管理人twitter

ブログ村



sponsored link