Question

J'utilise teradata et les sorties ci-dessous de la requête "Altlüd" lorsqu'il est exécuté en utilisant un client de Teradata.

select name as name  from MYTABLE where selector=?

Alors, je reçois « Altl? D » comme la sortie lorsque je tente d'exécuter la requête en utilisant un client java (avec jdbc pilotes Teradata). J'utilise « UTF-8 » charset et j'ai aussi essayé charset latine sans chance.

J'ai aussi essayé de résoudre les.

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();
 }
}

Et la sortie est

Altl? Dersdorf 65 = A 108 = l 116 = t 108 = l 65533 =? 100 = d

Si vous regardez la sortie produite, la valeur int pour le caractère spl est 65533 qui ne devrait pas être le cas.

Enfait il retourne 65533 pour tous les caractères spéciaux.

Les indices / pointeurs sera apprécié. Merci !!!

Était-ce utile?

La solution

Il semble être le caractère de remplacement Unicode U+FFFD. client JDBC et le serveur n'utilisent pas le même encodage pour les caractères. Le client semble essayer UTF-8, mais le serveur n'offre un format non UTF.

Je ne sais pas teradata, mais vous devez rechercher toutes les bases de données et paramètres du serveur ou pour le codage et / ou locale.

Autres conseils

Essayez d'utiliser CHARSET = comme paramètre côté client UTF-16.

Un moyen facile est de définir LC_ALL = LANG = en_US.UTF-16 , puis exécutez votre programme Java.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top