Skip to content

G-2310: Avoid using CHAR data type.

Blocker

Reliability

Reason

char is a fixed length data type, which should only be used when appropriate. char columns/variables are always filled to its specified lengths; this may lead to unwanted side effects and undesired results.

Example (bad)

1
2
3
4
5
create or replace package types_up
is
   subtype description_type is char(200);
end types_up;
/

Unexpected trailing spaces can lead to wrong results.

1
2
3
4
5
6
7
8
9
with
   dept as (
      select cast(department_name as varchar2(30 char)) as dname_vc2
            ,cast(department_name as char(30 char)) as dname_char
        from departments
   )
select count(*)
  from dept
 where dname_vc2 = dname_char;
1
2
3
  COUNT(*)
----------
         0

Example (good)

1
2
3
4
5
create or replace package types_up
is
   subtype description_type is varchar2(200 char);
end types_up;
/