2011-03-14 106 views
1

嗨,我有一个带latin1字符集的postgres数据库和一个表“用户”。我需要用准备好的语句在java中插入用户名将java utf-16字符串插入到postgres字符字段中

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()中包含像电子口音,O等字符,表存储怪异的字符。如何将正确的字符序列从java utf-16保存到postgres latin1字符集编码?

回答

4

你不需要做任何特殊的事情,jdbc驱动程序会为你处理所有的转换。但是,问题在于latin1字符集不能编码所有可用字符(它只支持256个字符)。所以,如果你试图把它们放在你的桌子上,你会失去某些字符。如果你真的想要存储国际数据,你必须让你的表存储一些unicode的变体(utf8,utf16等)。 (你需要使用一些postgres特定的配置来在数据库级别解决这个问题)。