Oracle Databaseで文字列を扱う際には、CHAR型とVARCHAR2型の違いを正しく理解することが重要です。特にCHAR型は固定長文字列型であり、指定した文字数に満たない値を格納すると末尾に空白文字が追加されるため、データ比較や検索処理で意図しない結果になることがあります。
この記事では、Oracle DatabaseのCHAR型の特徴や末尾スペースの補填動作、VARCHAR2型との違い、実際の利用時に注意すべきポイントについて詳しく解説します。
Oracle DatabaseのCHAR型は固定長文字列型
Oracle DatabaseのCHAR型は、あらかじめ指定した長さでデータを保存する固定長文字列型です。
例えば、CHAR(10)として定義したカラムに「ABC」という3文字のデータを登録した場合、内部的には10文字分の領域を持つため、不足している7文字分は半角スペースで補われます。
具体的には以下のようなイメージになります。
| 登録値 | CHAR(10)で保存される値 |
|---|---|
| ABC | ABC□□□□□□□(空白7文字分) |
| HELLO | HELLO□□□□□(空白5文字分) |
このように、CHAR型では指定したサイズを必ず確保するため、データ長が一定の場合に適しています。
CHAR型で末尾にスペースが補填される理由
CHAR型が空白で埋められる理由は、固定長データとして効率的に扱うためです。
例えば、都道府県コードや区分コードなど、必ず決まった長さになるデータでは固定長のCHAR型が便利です。すべてのデータが同じ長さになるため、データ管理や処理が単純になります。
一方で、氏名や住所、商品名など長さが変化するデータでは、不要な空白が増えるためCHAR型よりVARCHAR2型が適しています。
CHAR型とVARCHAR2型の違い
Oracle Databaseでは、文字列を扱う場合にCHAR型とVARCHAR2型がよく比較されます。
| 項目 | CHAR型 | VARCHAR2型 |
|---|---|---|
| 種類 | 固定長文字列 | 可変長文字列 |
| 不足分 | 末尾に空白を追加 | 追加しない |
| 向いているデータ | コードや区分値 | 名前や文章 |
例えば、CHAR(5)のカラムに「A」を登録すると5文字分として保存されますが、VARCHAR2(5)では「A」の1文字だけが保存されます。
そのため、文字数が一定であることが保証されるデータ以外ではVARCHAR2型を利用するケースが一般的です。
CHAR型の比較では末尾スペースが影響する場合がある
CHAR型を利用する際に注意したい点は、文字列比較の動作です。
Oracle DatabaseではCHAR型同士の比較では末尾の空白を考慮して比較されるため、見た目の文字数が異なっていても同じ値として扱われる場合があります。
例えば以下のような値を比較すると、空白部分が補われた状態で比較されるため一致することがあります。
CHAR(5)の値
ABC□□
比較対象
ABC
ただし、CHAR型とVARCHAR2型を比較する場合などでは挙動が異なることがあるため、アプリケーション側で文字列比較を行う場合は注意が必要です。
CHAR型を使用する場合の注意点
CHAR型は便利な型ですが、すべての文字データに適しているわけではありません。
例えば、ユーザー名を保存するカラムをCHAR(20)で作成すると、短い名前でも大量の空白を含む固定長データになります。
また、画面表示や外部システム連携を行う場合、末尾スペースを意識しないと余計な空白が表示されたり、データ連携時に問題になる場合があります。
実際のシステム設計では、以下のような基準で使い分けることが多いです。
- 郵便番号や固定長コードなど長さが決まっている値 → CHAR型
- 名前、住所、説明文など長さが変わる値 → VARCHAR2型
CHAR型のデータから空白を取り除く方法
CHAR型の値を扱う際に末尾スペースを削除したい場合は、Oracle DatabaseのTRIM関数などを利用できます。
SELECT TRIM(CHAR_COLUMN)
FROM TABLE_NAME;
TRIM関数を使うことで、文字列の前後に存在する不要な空白を削除できます。
ただし、データ登録時からVARCHAR2型を選択すべきケースでCHAR型を利用している場合は、後から加工するよりもテーブル設計を見直すことが重要です。
まとめ
Oracle DatabaseのCHAR型は、指定した文字数分の領域を確保する固定長文字列型です。指定した長さに満たないデータを登録すると、末尾には空白文字が補填されます。
固定長コードなどにはCHAR型が適していますが、文字数が変化する一般的な文字データではVARCHAR2型を利用する方が扱いやすい場合が多くあります。
CHAR型を利用する際は、末尾スペースの存在を理解し、検索や比較、外部システム連携への影響を考慮して設計することが大切です。

コメント