Вставьте строки Java UTF-16 в поля символов Postgres - PullRequest
1 голос
/ 15 марта 2011

Привет, у меня есть база данных postgres с набором символов latin1 и таблица "user". Мне нужно вставить имя пользователя, используя подготовленный оператор в Java

boolean success = false;  
String query = "INSERT INTO public.user (name,email) VALUES(?,?)";  
try {  
  PreparedStatement ps;  
  ps = db.prepareStatement(query);  
  ps.setString(1, user.getName());  
  ps.setString(2, user.getEmail());  
  if (ps.executeUpdate() != 0)  
    success = true;  
  ps.close();  
} catch (SQLException ex) {  
} finally {  
  return success;  
}

Проблема в том, что user.getName () и user.getEmail () содержат символы с акцентами, такие как è, ò и т. Д., Таблица хранит странные символы. Как сохранить правильную последовательность символов из java utf-16 в кодировку postgres latin1 charset?

Ответы [ 2 ]

4 голосов
/ 15 марта 2011

вам не нужно делать ничего особенного, драйвер jdbc обрабатывает все преобразования за вас.проблема, однако, заключается в том, что кодировка latin1 не может кодировать все доступные символы (она поддерживает только 256 символов).таким образом, вы потеряете определенные символы, если попытаетесь поместить их в свою таблицу.если вы серьезно относитесь к хранению международных данных, вы должны сделать так, чтобы в ваших таблицах сохранялся какой-либо вариант Unicode (utf8, utf16 и т. д.).(вам нужно исправить это на уровне базы данных, используя некоторые специфичные для postgres конфигурации).

0 голосов
/ 15 марта 2011

jtahlborn прав насчет вашей проблемы.

Взгляните на http://www.postgresql.org/docs/8.2/static/multibyte.html, чтобы понять многобайтовые кодировки в postgre.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...