将java utf-16字符串插入postgres字符字段

时间:2011-03-14 23:54:53

标签: java postgresql

HI,我有一个带latin1字符集的postgres数据库和一个表“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 个答案:

答案 0 :(得分:4)

您无需执行任何特殊操作,jdbc驱动程序会为您处理所有转换。但问题是,latin1字符集无法编码所有可用字符(它只支持256个字符)。所以,如果你试图把它们放在你的桌子上,你会丢失某些字符。如果你真的想存储国际数据,你必须让你的表存储一些unicode变体(utf8,utf16等)。 (您需要使用一些特定于postgres的configuratino在数据库级别修复此问题。)

答案 1 :(得分:0)

jtahlborn对你的问题是正确的。

查看http://www.postgresql.org/docs/8.2/static/multibyte.html以了解postgre中的多字节编码。