- Este tópico contém 5 respostas, 3 vozes e foi atualizado pela última vez 14 anos, 3 meses atrás por
mpungan.
-
AutorPosts
-
24 de novembro de 2011 às 9:04 pm #101788
mpungan
ParticipanteEstamos enfrentando alguns problemas relativos à codificação dos dados gerados do site/gerenciador para o Banco de Dados Oracle.
Aqui na empresa, nosso Banco de Dados Oracle foi instalado e configurado com o padrão de codificação UTF-8.
No ambiente de desenvolvimento onde testamos, o padrão de codificação encontrado é o WE8ISO8859P1 e até onde nos consta, não seria possível, alterar apenas o Schema SITE_MJ para a codificação UTF-8.
Desta forma, efetuamos alguns testes e tentativas de conversão de UTF-8 para WE8ISO8859P1.
O que já testamos e não funcionou:
• Setar o charset no TSN de conexão (DESCRIPTION=…); charset=WE8ISO8859P1
• Setar a variável NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1 através do putenv(), logo no começo do script (isso parece não estar funcionando, porque sempre onde pesquisamos, a solução passa por setar essa variável de ambiente direto no Servidor Apache);
• Usar a função utf8_decode() nos valores que vão ser inseridos no banco
• Usar a função CONVERT() do Oracle nos inserts (com e sem o utf_decode())
Resultado:
O caractere acentuado é substituído por um “?” no banco.
A função CONVERT pareceu não fazer nada, talvez porque o caractere enviado/traduzido na conexão já esteja sendo convertido para “?” antes.Se inserirmos o caractere acentuado diretamente no banco (utilizando o Frontend Navicat), na hora de efetuar uma query SELECT, nos é retornado o caractere sem o acento (“É” torna-se “E”), o que parece ser algo feito na conexão, também não adiantando aplicar nenhum tipo de conversão via PHP, já que o caractere exibido é o “E” e não mais um “É”.
Se não setarmos o charset ou setarmos ele no TSN para AL32UTF8, não é aplicado nenhum tipo de conversão; E ao inserir direto no banco, ele insere dois pontos de interrogação (“É” torna-se “??”), dando a entender que ele traduz o caractere como multibyte e converte errado os dois bytes.
Trocar o tipo de campo de VARCHAR2 para NVARCHAR2 também foi testado e também não deu certo (convertemos os caracteres para UTF16 e inseriu tudo vazio, mesmo o PHP conseguindo converter a string); De qualquer maneira, isso não resolve o problema, pois ainda temos os campos CLOB e mesmo alguns campos VARCHAR2 precisam ter tamanho 4000.
Solicitação:
Gostaria de verificar se há alguma sugestão sobre como proceder para efetuar esta conversão, ou de que outra forma poderíamos resolver este problema.
Se fizessemos isso, setar a variável NLS_LANG diretamente no Servidor Apache, para “AMERICAN_AMERICA.WE8ISO8859P1”, já que, de repente setar via putenv pode não funcionar a contento.
24 de novembro de 2011 às 9:22 pm #101790rman
Participante@mpungan
O ideal é sempre trabalhar com a mesma codificação, se o banco é utf-8 o cliente também deve ser utf-8.
Verifica se é possível o seguinte.
Crie um novo banco em utf-8, faça o expdp da base, e um impdp nessa nova base.
24 de novembro de 2011 às 11:20 pm #101796mpungan
ParticipanteMas a idéia e não mudar e ficar no o char set em AMERICAN_AMERICA.WE8ISO8859P1, nossos bancos são todos com o char set padrão.
24 de novembro de 2011 às 11:41 pm #101798vieri
ParticipanteJá passei por um problema similar uns 4 anos atrás.
A Oracle disponibiliza 2scripts no $ORACLE_HOME/dbs justamente para casos como os seus.
CSALTER e CSSCAN.
Um para fazer o scan e checar se é possivel a mudança de charset
e outro para realiza-lá.http://www.oracle-base.com/articles/10g … ration.php
É bom vc verificar e comparar o charset de ambos os S.O’s também.
UTF é unicode, ou seja contem a codificação de todos os subsets.
WE8ISO8859P1 é leste da europa portanto não contem todos,
ele é um subset do superset utf8.Porque vc não recria seu ambiente de desenvolvimento com UTF8. e
Restaura de produção com RMAN.Pede isso para o seu DBA, vc já possui argumento para isso.
24 de novembro de 2011 às 11:46 pm #101799vieri
ParticipanteApenas para te situar.
vc está buscando a solução no desenvolvimento mas isso é problema de ambiente.25 de novembro de 2011 às 4:36 pm #101819mpungan
ParticipanteEssa solução que foi dada desde já agradeço, isso seria para trocar o char set do banco. Tem como fazer isso trocar o char set na aplicação. Pois o que tudo indica é isso que esta ocorrendo esse problema com a aplicação. Ao que tudo indica é isso que esta ocorrendo a aplicação é que esta com problemas.
-
AutorPosts
- Você deve fazer login para responder a este tópico.