空の文字列を NULL として扱うのは、Oracle の癖の 1 つです。これは一部で物議をかもしています ( http://www.google.co.uk/search?q=oracle+null+ "empty+string" でグーグル検索してみてください)。Oracle は、将来この動作を変更する可能性があります。息を止めないでください。
編集
指摘されているように、これは空の文字列ではなく、空白の文字列です。その場合、それは Oracle 自体ではありません。
SQL> desc emp
Name Null? Type
----------------------------------------- -------- ----------------------------
EMPNO NOT NULL NUMBER(4)
ENAME NOT NULL VARCHAR2(10)
JOB VARCHAR2(9)
MGR NUMBER(4)
HIREDATE DATE
SAL NUMBER(7,2)
COMM NUMBER(7,2)
DEPTNO NUMBER(2)
SQL> insert into emp (empno, ename) values (9999, ' ')
2 /
1 row created.
SQL> select length(ename) from emp
2 where empno = 9999
3 /
LENGTH(ENAME)
-------------
6
SQL>
考えられる原因は次のとおりです。
問題の列にa を適用するトリガーTRIM()
(または同様の処理)
なんらかの方法で介入するIBATIS