Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将java utf-16字符串插入postgres字符字段_Java_Postgresql - Fatal编程技术网

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

将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

嗨,我有一个带有拉丁字符集的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.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中的多字节编码