Oracleの文字型

文字データ型には char や varchar2 などが存在するが、
それぞれどのように空白が扱われているかを検証。



データ型の検証

テストテーブルを作成

SQL> create table test(col1 char(5),col2 varchar2(5));
表が作成されました。

SQL> desc test
 名前    NULL?    型
 ----- -------- -----------
 COL1           CHAR(5)
 COL2           VARCHAR2(5)

データを追加

SQL> insert into test values('XX   ','YY   ');
1行が作成されました。

※ それぞれ3バイトずつ半角スペースを入れている。

データを確認

SQL> select * from test;
COL1  COL2
----- -----
XX    YY

char(5)項目を ‘XX’で抽出(スペース無し)

SQL> select * from test where col1 ='XX';
COL1  COL2
----- -----
XX    YY

char(5)項目を ‘XX ‘条件で抽出(スペース有り)

SQL> select * from test where col1 = 'XX   ';
COL1  COL2
----- -----
XX    YY

varchar2(5)項目を ‘YY’で抽出(スペース無し)

SQL> select * from test where col2 = 'YY';
レコードが選択されませんでした。

varchar2(5)項目を ‘YY ‘条件で抽出(スペース有り)

SQL> select * from test where col2 = 'YY   ';
COL1  COL2
----- -----
XX    YY

結果

char は固定長なので where 条件は ‘XX’ でも ‘XX ‘ でも可。
varchar2 は可変長なので ‘YY’ では不可で ‘YY ‘ なら可。