すべて正常に動作しています:
Database server = DB2/SUN64 9.1.9
db2 => create table tt (a char (10), b varchar(10))
DB20000I The SQL command completed successfully.
db2 => insert into tt values('a ', 'a '), (' b', ' b'), (' c ',' c '), ('d','d')
DB20000I The SQL command completed successfully.
db2 => select a, b, length(a), length(b) from tt
A B 3 4
---------- ---------- ----------- -----------
a a 10 2
b b 10 2
c c 10 3
d d 10 1
4 record(s) selected.
db2 => select '<'||a||'>', '<'||b||'>', length(a), length(b) from tt
1 2 3 4
------------ ------------ ----------- -----------
<a > <a > 10 2
< b > < b> 10 2
< c > < c > 10 3
<d > <d> 10 1
4 record(s) selected.
db2 =>
EDITH: これは予期される動作です。char() は固定長、varchar() は可変長 (最大長あり) であるため、char() の長さは一定です。先頭のスペースは保持する必要があり、末尾のスペースは varchar() で削除できます。