Varchar de 8000 só retorna 4000

Galera,
Estou com o seguinte problema, executo uma procedure no SQLServer 2000 que retorna 8000 bytes no query analyzer, ao rodar no java só retorna 4000, vejam parte do código:

connection = this.createNewConnection();

callableStatement = connection.prepareCall("{CALL dbPortalSaude..PR_SEL_COMPS_SITE(?,?)}");

callableStatement.setInt(1, tipousuario);
callableStatement.registerOutParameter(2, java.sql.Types.LONGVARCHAR, 8000);
callableStatement.execute();

String XML = callableStatement.getString(2);


System.out.println(XML.length()); // só retorna 4000

alguém já passou por isso ou sabe o que pode estar acontecendo?

[]s

Tem cara de ser alguma coisa com o seu driver, já que está retornando muitos dados em uma query. Qual você está usando, o JTDS ou o da Microsoft?

Caso eu não esteja enganado, o drive JDBC só retorna até 4 mil caracteres. Maior que isso você vai precisar usar um CLOB.

Microsoft SQL Server JDBC Driver SP3

[quote=Rafael Nunes]Caso eu não esteja enganado, o drive JDBC só retorna até 4 mil caracteres. Maior que isso você vai precisar usar um CLOB.
[/quote]

vlw, vou tentar aki pra ver no que dá.

O que dá para chutar é que para o driver da Microsoft ambos os tipos (NVARCHAR e VARCHAR) são tratados da mesma maneira.

(Obviamente poderíamos tentar descompilar o driver já que é 100% java mas, para começar, estaríamos violando a licença…)

Como o campo NVARCHAR pode ter no máximo 4000 caracteres (limitação do banco), ele deve estar achando que um VARCHAR também pode ter no máximo 4000 caracteres…

Talvez o JTDS também tenha uma limitação dessa, mas não sei exatamente onde. Só testando (não vi se isso aparece no FAQ, por exemplo; ele só menciona que se você usar o protocolo antigo, compatível com o SQL 6.5, campos IMAGE (BLOBs em Java ou Oracle) podem ter no máximo 4000 bytes. Mas para usar o protocolo antigo é necessário ter uma string de conexão especial.