Erro persistir POstgreSQL- character 0xefbfbf of encoding "UTF8" has no equivalent in "LATIN1"

8 respostas
D

Olá pessoa.

Estou tentando inserir dados de uma view em uma tabela no PostgreSQL.

O procedimento é simples através de um método consulta na view, armazena em uma LIST e depois insere na tabela. mas quando vai inserir esta dando o seguinte erro:

Caused by: org.postgresql.util.PSQLException: ERROR: character 0xefbfbf of encoding "UTF8" has no equivalent in "LATIN1"
	at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:1592)
	at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1327)
	at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:192)
	at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:451)
	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:350)
	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeUpdate(AbstractJdbc2Statement.java:304)
	at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeDirectNoSelect(DatabaseAccessor.java:831)

Estou utilizando Glassfish, JPA2 e JSF.

A Conexão é feita através de uma PU, segue:

<?xml version="1.0" encoding="UTF-8"?>
<!-- was: <?xml version="1.0" encoding="ISO-8859"?> -->
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
  <persistence-unit name="GeoCorrelacaoPU" transaction-type="JTA">
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
    <jta-data-source>palhoca-local</jta-data-source>
    <exclude-unlisted-classes>false</exclude-unlisted-classes>
    <properties>
      <property name="eclipselink.ddl-generation" value="create-tables"/>
    </properties>
  </persistence-unit>
</persistence>

O PostgreSQL esta configurado como LOCALE “C” e o banco usa a linguagem Latin1.

Se alguém puder me ajudar.

Agradeço a atenção de todos;

8 Respostas

H

Você não poderia alterar o colate do seu banco não? Colocar como utf-8?

D

Pior que não dá, todos os bancos aqui na empresa que trabalho estão em Latin1.

H
Tem uma alteração que você pode fazer, mas que pode te ferrar caso você queria fazer uma portabilidade de bancos:

@Column(name = NAME_COL, columnDefinition = VARCHAR(250) COLLATE latin1_general_cs)

private String name;

Eu digo que pode te ferrar, pois caso sua aplicação venha mudar de banco, você teria que mudar todo seu seu código para que a declaração do COLLATE seja correta.

D

Ta doido o negócio aqui.

@Column(name = "nm_pessoa_razao_social", columnDefinition = "VARCHAR(100) COLLATE latin1_general_cs") 
    private String nmPessoaRazaoSocial;

deu o Aviso/erro

: org.postgresql.util.PSQLException: ERROR: syntax error at or near "COLLATE"
H

Veja qual a sintaxe correta para o postgres. Outra coisa é que você terá que dropar caso algum campo esteja com UFT8.

D

Não achei nada que funcionasse neste sentido.

Tu não saberia me dizer de onde ele tira aquele “UTF8” ali. Será que é no Glassfish? Procurei algo e não encontrei.

H

denispoa:
Não achei nada que funcionasse neste sentido.

Tu não saberia me dizer de onde ele tira aquele “UTF8” ali. Será que é no Glassfish? Procurei algo e não encontrei.


Sorry, nem idéia.

D

Acho que a caca é no meu método, ali no for não estou sabendo inserir o objeto! Ai ele tenta inserir algo estranho no banco e dá o erro.

public void listaViewCorrelacao() {
        System.out.println("Listando Imóveis de Correlação.");
        imoveis = null;
        try {           
            imoveis = getFacade().getViewCorrelacao();            
            if(imoveis == null){
                nrCadastroImobiliario = 0;
            }
            System.out.println("Sucesso ao listar Imóveis de Correlacção.");
        } catch (Exception e) {
            FacesContext ctx = FacesContext.getCurrentInstance();
            ctx.addMessage(null, new FacesMessage("Erro ao listar Imóveis de Correlação: " + e.getMessage()));
            System.out.println("Erro ao ao listar Imóveis de Correlação: " + e.getMessage());
            e.printStackTrace(System.out);
        }

      for(int x = 0;x < 5;x++){
              Correlacao imovel = new Correlacao();
              imovel = imoveis.get(x);
              getFacade().create(imovel);
              System.out.println("gravando imovel: " + imoveis.get(x));                          
              
        }
}
Criado 29 de fevereiro de 2012
Ultima resposta 29 de fev. de 2012
Respostas 8
Participantes 2