将java utf-16字符串插入到postgres字符字段中
问题描述:
嗨,我有一个带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字符集编码?
答
你不需要做任何特殊的事情,jdbc驱动程序会为你处理所有的转换。但是,问题在于latin1字符集不能编码所有可用字符(它只支持256个字符)。所以,如果你试图把它们放在你的桌子上,你会失去某些字符。如果你真的想要存储国际数据,你必须让你的表存储一些unicode的变体(utf8,utf16等)。 (你需要使用一些postgres特定的配置来在数据库级别解决这个问题)。