将java utf-16字符串插入postgres字符字段
嗨,我有一个带有拉丁字符集的postgres数据库和一个表用户。我需要使用java中的一个准备好的语句插入用户的名称将java utf-16字符串插入postgres字符字段,java,postgresql,Java,Postgresql,嗨,我有一个带有拉丁字符集的postgres数据库和一个表用户。我需要使用java中的一个准备好的语句插入用户的名称 boolean success = false; String query = "INSERT INTO public.user (name,email) VALUES(?,?)"; try { PreparedStatement ps; ps = db.prepareStatement(query); ps.setString(1, user.g
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字符集编码?您不需要做任何特殊的事情,jdbc驱动程序将为您处理所有转换。然而,问题是latin1字符集不能对所有可用字符进行编码,它只支持256个字符。因此,如果试图将某些字符放入表中,则会丢失这些字符。如果您对存储国际数据很认真,那么必须让表存储unicode utf8、utf16等的一些变体。您需要在数据库级别使用一些postgres特定的配置来解决这个问题。您不需要做任何特殊的事,jdbc驱动程序会为您处理所有转换。然而,问题是latin1字符集不能对所有可用字符进行编码,它只支持256个字符。因此,如果试图将某些字符放入表中,则会丢失这些字符。如果您对存储国际数据很认真,则必须使您的表存储unicode utf8、utf16等的一些变体。您需要在数据库级别使用一些postgres特定的配置来解决此问题。jtahlborn解决了您的问题
看看如何理解postgre中的多字节编码。jtahlborn对您的问题的看法是正确的 了解postgre中的多字节编码