Ahhh dovevi dirlo prima che è un BLOB ! il BLOB contiene un flusso "crudo" di byte. Il DB non "sa" nulla di che cosa rappresenta o contiene quella colonna. Se per te contiene del "testo" allora spetta a TE effettuare le conversioni da String a byte[] e viceversa in maniera fissa, uniforme e coerente.
No! getBytes() di String (quello così, senza argomenti) usa il charset di default della piattaforma su cui sta girando la applicazione Java. Quindi NON va bene.
Usa sempre UTF-8 per queste conversioni.
Non ha nulla che fare con i BLOB. I BLOB non hanno un "encoding" di per sé. Quello che contengono lo devi sapere tu e trattare in modo adeguato, non lo sa il DB.
Non serve più di tanto, ora che sappiamo che è un BLOB. Il problema è sicuramente dovuto a tue conversioni inappropriate.
P.S.: e tra l'altro, se è un BLOB, allora non dovresti usare setString di PreparedStatement né getString del ResultSet.
P.S. 2: se è solo testo (potenzialmente molto lungo), perché non un CLOB (Character Large OBject)? Che in MySQL si chiamano tecnicamente TINYTEXT, TEXT, ecc....