Problema lettura dei caratteri speciali da Teradata - JDBC
Domanda
Io uso Teradata e il seguito delle uscite di query "Altlüd" quando viene eseguito utilizzando un client Teradata.
select name as name from MYTABLE where selector=?
considerando che, ottengo "Altl? D" come l'uscita quando si tenta di eseguire la query utilizzando un client JDBC (Java con Teradata driver). Sto usando "UTF-8" charset e ho anche provato charset latina senza fortuna.
Inoltre ho provato questo per risolvere i problemi.
while (rs.next()) {
System.out.println(rs.getString(1));
Reader rd = rs.getCharacterStream(1);
int charr = rd.read();
while (charr >= 0) {
System.out.println(charr + " = " + ((char) charr));
charr = rd.read();
}
}
E l'uscita è
Altl? Dersdorf 65 = A 108 = l 116 = t 108 = l 65533 =? 100 = d
Se si guarda l'output prodotto, il valore int per il carattere SPL è 65533, che non dovrebbe essere il caso.
Infatti restituisce 65533 per tutti i caratteri speciali.
Eventuali indizi / puntatori sarà apprezzato. Grazie !!!
Soluzione
Sembra essere il carattere di sostituzione U+FFFD
Unicode. client JDBC e il server non utilizzano la stessa codifica per i caratteri. Il cliente sembra provare UTF-8, ma il server non offre alcuna formato non UTF.
Non so Teradata, ma si dovrebbe cercare eventuali impostazioni del database e del server o per la codifica e / o locale.
Altri suggerimenti
Prova ad utilizzare charset = UTF-16 come parametro di lato client.
Un modo semplice è quello di impostare LC_ALL = LANG = en_US.UTF-16 e quindi eseguire il programma Java.