我有一个postgres 9.2数据库,编码是UTF-8。
我有一个应用程序(用java编写)来更新这个数据库,读取.sql文件并在数据库中执行它们。
但我发现了一个问题:
在其中一个.sql文件中,我有以下指令:

insert into usuario(nome)
values('Usuário Padrão');

执行完这个之后,当我转到表数据时,插入的是:"Usuário Padrão"
如果我直接从pgAdmin执行此命令,它将正确创建。
所以我不知道这是不是数据库的问题,还是执行脚本的程序的问题。
---编辑---
下面是我获取JDBC连接的方法:
public static Connection getConnection() throws SQLException{
    Connection connection;
    String url="jdbc:postgresql://"+servidor+":"+porta+"/"+nomeBanco;
    Properties props = new Properties();
    props.put("user", usuario);
    props.put("password", senha);
    connection=DriverManager.getConnection(url,props);
    connection.setAutoCommit(false);
    return connection;
}

这是我用来读取文件的代码,但看起来是正确的,因为如果我打印从文件中读取的字符串,它会显示正确的字符串。
public static String lerArquivo(File arquivo){
    StringBuilder conteudo=new StringBuilder();
    BufferedReader br = null;
    try {
        br=new BufferedReader(new FileReader(arquivo));
        String linha;
        while((linha=br.readLine())!=null){
            conteudo.append(linha).append("\n");
        }
    } catch (IOException e) {
        FrameErroBasico f=new FrameErroBasico(null, true);
        f.setText("Erro ao ler arquivo.",e);
        f.setVisible(true);
    }finally{
        try{br.close();}catch(Exception e){}
    }
    return conteudo.toString();
}

最佳答案

这很可能是问题所在:

    br=new BufferedReader(new InputStreamReader(new FileInputStream(arquivo), "UTF-8"));

(看起来我的水晶球还不错!)

关于java - 数据库中的编码问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17820443/

10-10 08:17
查看更多