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编码?
答案 0 :(得分:4)
您无需执行任何特殊操作,jdbc驱动程序会为您处理所有转换。但问题是,latin1字符集无法编码所有可用字符(它只支持256个字符)。所以,如果你试图把它们放在你的桌子上,你会丢失某些字符。如果你真的想存储国际数据,你必须让你的表存储一些unicode变体(utf8,utf16等)。 (您需要使用一些特定于postgres的configuratino在数据库级别修复此问题。)
答案 1 :(得分:0)
jtahlborn对你的问题是正确的。
查看http://www.postgresql.org/docs/8.2/static/multibyte.html以了解postgre中的多字节编码。