请教一个简单却又很烦的和Java相关的数据库问题

在数据库中如果采用char类型的数据,使用jdbc或者ejb数据持久化方式时,如果在前台输入信息,信息长度不够数据库中定义的长度,他们不会自动补空格,结果造成查询不到数据.有没有什么比较好的办法解决这个问题,难道要让我找出数据库结构自己去补空格:).
请各位说一下自己的经验.

你使用数据库的like查询?
一般尽量回避这种方式。

select * from tbl_a where trim(col_a)= '?'

但这样会屏蔽掉col_a上的索引,如果要使用索引,建立一个函数索引
BTW:是oracle吧

改变一下数据库的字段类型就可以了啊,因为如果要存入的是可变长度的数组,为什么不把数据库的字段类型设成nvchar?

不管是不是like语句啊
我用的是Oracle,有的字段要跟以前的系统保持一致,所以没有用varchar,可是Oracle的jdbc驱动程序居然不会根据数据类型补空格(存在Oracle中的数据不满长度有空格,输入的数据没空格)

我也遇到这个问题,是在没办法。
cmp他不会加trim()也没有用like.

如用类型为char(20)的列作主键,findByPrimaryKey里面会用到
这种查询


select ... from mytable t1 where t1.id = ?

如果用来查询的参数pk长度是18个字母
结果是javax.ejb.ObjectNotFound
这是CMP Container生成的代码里面的。

直接用preparedStatement也是一样


select t1.name from mytable t1 where t1.id = ?

ps.setString(1, param);
ResultSet里面没有记录

而使用


"select t1.name from mytable t1 where t1.id = '" + param + "'"

则可以。
但是CMP怎么办哪?

------------
我的数据库是从db2移植过去的(到oracle)。用wsad开发。

生成oracle的deploy code
结果所有的原来是char类型的字段的表都查寻没有结果

这算是jdbc的问题还是wsad的问题呢?