Проблема чтения специальных символов из терадата - JDBC - PullRequest
0 голосов
/ 30 августа 2010

Я использую teradata и приведенный ниже запрос выводит «Altlüd» при запуске с использованием клиента teradata.

select name as name  from MYTABLE where selector=?

В то время как я получаю «Altl? D» в качестве вывода, когда пытаюсь выполнить запрос сJava-клиент (JDBC с драйверами Teradata).Я использую кодировку "UTF-8", и я также попробовал латинскую кодировку без удачи.

Я также пытался это устранить, чтобы устранить неполадки.

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

И вывод

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

Если вы посмотрите на полученный вывод, значение int для символа spl равно 65533, чего не должно быть.

Infact возвращает 65533 для всех специальных символов.

Любые подсказки / указатели будут оценены.Спасибо !!!

Ответы [ 2 ]

0 голосов
/ 10 марта 2013

Попробуйте использовать CHARSET = UTF-16 в качестве параметра на стороне клиента.

Один простой способ - установить LC_ALL = LANG = en_US.UTF-16 и затем запустить вашу программу Java.

0 голосов
/ 30 августа 2010

Кажется, это символ замены Юникода U+FFFD. Клиент и сервер JDBC не используют одинаковую кодировку для символов. Кажется, что клиент пытается UTF-8, но сервер действительно предлагает любой формат не UTF.

Я не знаю teradata, но вам следует искать настройки базы данных и / или сервера для кодировки и / или локали.

...