Oracle JDBC e tipo de dados Oracle CHAR

Eu tenho um problema complicado com o manuseio de @ JDBC do driver OracCHAR tipos de dados. Vamos pegar esta tabela simples:

create table x (c char(4));
insert into x (c) values ('a');  -- inserts 'a   '

Então, quando insiro algo emCHAR(4), a string é sempre preenchida com espaço em branco. Isso também é feito quando executo consultas como esta:

select * from x where c = 'a';    -- selects 1 record
select * from x where c = 'a ';   -- selects 1 record
select * from x where c = 'a   '; -- selects 1 record

Aqui, a constante'a' também é preenchido com espaço em branco. É por isso que o registro é sempre retornado. Isso vale quando essas consultas são executadas usando um JDBCPreparedStatement também. Agora, o mais complicado é quando eu quero usar uma variável de ligação:

PreparedStatement stmt = 
  conn.prepareStatement("select * from x where c = ?");
stmt.setString(1, "a");    // This won't return any records
stmt.setString(1, "a   "); // This will return a record
stmt.executeQuery();

Esta é uma solução alternativa:

PreparedStatement stmt = 
  conn.prepareStatement("select * from x where trim(c) = trim(?)");
stmt.setString(1, "a");    // This will return a record
stmt.setString(1, "a   "); // This will return a record
stmt.executeQuery();

EDITA: Agora, estas são as restrições:

A solução alternativa acima não é desejável, pois modifica o conteúdo dec e?, E faz usando índices emc Bem difícil Movendo a coluna deCHAR paraVARCHAR (como deveria ser, é claro) não é possível

EDITA: A razão para essas restrições é porque eu faço essa pergunta do ponto de vista do desenvolvedor do jOOQ, uma biblioteca de abstração de banco de dados. Portanto, meus requisitos são fornecer uma solução muito genérica que não quebre nada no código do cliente do jOOQ. É por isso que não sou realmente um grande fã da solução alternativa. E é por isso que não tenho acesso a esseCHAR declaração da coluna. Ainda assim, eu quero poder lidar com este caso.

O que você faria em vez disso? O que é uma boa prática para lidar comCHAR tipos de dados quando quero ignorar espaços em branco à direit

questionAnswers(5)

yourAnswerToTheQuestion