- Este tópico contém 14 respostas, 3 vozes e foi atualizado pela última vez 17 anos, 11 meses atrás por
madcapone.
-
AutorPosts
-
2 de abril de 2008 às 9:08 pm #81575
madcapone
ParticipanteBom, gostaria de dizer que só estou criando um tópico novo porquê o do Renato ficou sem solução (ele mesmo não deu retorno), mas como tem várias respostas, talvez não chame atenção para mais ajuda.
O problema: as letras acentuadas vêm substituídas por não acentuadas ou pontos de interrogação. Ainda não testei a inserção, mas as consultas vêm com problema.
Os documentos todos possuem header:
O httpd.conf está configurado com:
AddLanguage pt .pt
AddLanguage pt-BR .pt-br
LanguagePriority pt-BR en ca cs da de el eo es et fr he hr it ja ko ltz nl nn no pl pt ru sv zh-CN zh-TW
ForceLanguagePriority Prefer Fallback
AddDefaultCharset ISO-8859-1
AddCharset ISO-8859-1 .iso8859-1 .latin1
AddCharset ISO-8859-2 .iso8859-2 .latin2 .cenResultado do comando locale:
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=O resultado de locale -a exibe uma quantidade enorme de siglas, incluindo:
pt_BR
pt_BR.iso88591
pt_BR.utf8
pt_PT
pt_PT@euro
pt_PT.iso88591
pt_PT.iso885915@euro
pt_PT.utf8Se for necessário, posto os conteúdos dos arquivos lang.sh e lang.csh localizados em /etc/profile.d. (Não sei para que servem e não entendi nada de seus conteúdos. Mas vi referências em outros lugares e fiquei na dúvida se podem ser úteis ou não para esta situação).
Gostaria de saber:
1. A alteração das configurações do SO pode resolver o problema do charset no oracle?
2. Se sim, como altero essas configurações?
3. Existem parâmetros configuráveis do client do Oracle neste servidor? Como alterá-los?O sistema é o CentOS 4, as páginas são exibidas em PHP4, servidor Apache 1. O banco de dados (Oracle 9i) está em outra máquina, mas com certeza foi criado usando charset PT BR.
Agradeço qualquer ajuda.
2 de abril de 2008 às 9:36 pm #81576Ishii
ParticipanteOlá,
Gostaria de saber:
1. A alteração das configurações do SO pode resolver o problema do charset no oracle?
2. Se sim, como altero essas configurações?
3. Existem parâmetros configuráveis do client do Oracle neste servidor? Como alterá-los?Vamos as informações que posso ajudar…
1- Não, o Oracle tem suas próprias configurações de Caracter Set. Isso deve ser definido na Criação do Banco de Dados mas isso não altera o seu conteúdo. No link http://download.oracle.com/docs/cd/B193 … m#CEGHDCJF tem um pouco mais de informações sobre o CSALTER que é um script que altera esta configuração de charset mas não muda os dados…
2- Como respondi é possível alterar o charset mas não os dados migrados sem uma conversão (que é manual….);
3- Não tenho certeza se alterar o Client do Oracle vai ajudar em alguma coisa neste caso….[]s Ishii
2 de abril de 2008 às 9:49 pm #81577madcapone
ParticipantePois é, eu já tinha visto esse CSALTER, mas pelo que entendi ele serve para alterar as configurações do BD. Essas estão ok. Possuo um ambiente de testes localmente, com PHP5, client 10g, Apache 2.2, e apesar das diferenças (e considerando-se alguns scripts para compatibilização de funções entre php5 e 4), tudo funciona normalmente.
Localmente os resultados das pesquisas vêm corretos. Além disso, existem várias aplicações funcionando nessa mesma instância de BD, todas ok. Se fosse um problema no BD, pará-lo seria um problemão.
Li em algum lugar (depois de tanta pesquisa, difícil lembrar onde) que o Oracle prioriza as configurações do sistema operacional na hora de retornar os resultados. Essa informação provavelmente é passada pelo client. Então suponho que existam dois métodos para a resolução desse problema: configurar o client ou configurar o OS.
Obrigado pela resposta. Vou continuar procurando.
Alguém conhece um fórum de CentOS???
2 de abril de 2008 às 9:59 pm #81578Ishii
ParticipanteOlá,
Só para eu entender então:
Os resultados das consultas cujo o conteúdo possuem caracteres acentuados está vindo com ponto de interrogação ou sem acentuação e isso ocorre na Aplicação PHP e no sql*plus também? Ou se você consultar o resultado com um client tipo TOAD, PL/SQL Developer ou SQL Developer sai correto ou não?
Em resumo o dado armazenado no Oracle está correto mas o retorno em tela não – na aplicação ou nenhuma das anteriores?
[]s Ishii
2 de abril de 2008 às 10:40 pm #81579madcapone
ParticipanteAmbos. Caracteres como áéíóú são substituídos por aeiou. Outros como ãç são substituídos por ??.
As consultas no ambiente local retornam caracteres acentuados corretamente, bem como através do TOAD. Essa base de dados está up há anos. Iniciamos em 2002 com a versão 8 (acho) e depois migramos para versão 9i.
Os dados estão armazenados corretamente, e o erro só se manifesta nesta aplicação específica neste servidor CentOS4 específico. =)
Testei para ver se poderia ser um erro nas configurações de região do Apache (httpd.conf etc) ou do PHP, de codificação das páginas, ou mesmo programação, mas não é. O OCI está retornando os caracteres substituídos mesmo.
Idéias? =)
Valeu. []’s
2 de abril de 2008 às 10:53 pm #81580Ishii
ParticipanteBom, para ter certeza que o problema está no SO do Servidor faça um teste no PHP colocando o echo destes caracteres áéíóú e veja o retorno e faça o mesmo teste num html simples no apache…
🙁
[]s Ishii
2 de abril de 2008 às 11:09 pm #81581madcapone
ParticipanteOk. Feito … Ambos produziram resultados normais.
Eu já tinha realizado esse teste antes, mas diz novamente por desencargo de consciência.
. Os simples echo’s resultam normalmente.
. A utilização tanto de htmlentities quanto o decode também exibem caracteres corretamente.
. Os caracteres em html simples são exibidos corretamente tanto no formato direto “áéíóú” quanto nos áé e etc.Mas nem era necessário realizar estes testes. As páginas são exibidas todas corretamente, com exceção das áreas em que resultados trazidos do banco são exibidos. Nestes os caracteres são substituídos. =(
Postei também no http://centosbr.org/ para ver se alguém tem uma idéia. Se resolver, posto por aqui.
Obrigado!!
2 de abril de 2008 às 11:44 pm #81582Ishii
ParticipanteOlá,
Vai mais uma tentativa…
No profile do usuário oracle da máquina client (que é o CentOS) verifique se existe o parâmetro NLS_LANG e qual o valor dele. Se não existir crie e exporte este parâmetro com o valor NLS_LANG=BRAZILIAN PORTUGUESE_BRAZIL.WE8ISO8859P1
E vamos tentando até saber a solução correta. (que normalmente deve ser bastante simples…)
[]s Ishii
3 de abril de 2008 às 12:26 am #81584madcapone
Participante=) Beleza!
Mas como faço isso? Sei nada de unix|linux, nem sei o que CentOS é. rsrs
Valeu.
3 de abril de 2008 às 6:49 am #81592Ishii
ParticipanteHuumm,
Melhor verificar então com quem fez a instalação do CentOS pois pode ter sido utilizado o instantclient do Oracle ou uma instalação do Client do Oracle 9i mesmo mas o melhor seria ter certeza para se alterar corretamente. Para ter uma idéia no Client 9i normal deve ter um usuário Oracle no SO com profile criado mas no instantclient isso não é necessário….
[]s Ishii
3 de abril de 2008 às 9:12 pm #81595madcapone
ParticipanteOk.
Obrigado pela atenção.4 de abril de 2008 às 6:46 pm #81609madcapone
ParticipanteOlá! Descobri que é Oracle 10g, client 10.1.3. Isso ajuda a identificar onde fica o profile?
Grato.
4 de abril de 2008 às 7:08 pm #81610Marcio68Almeida
Participante[quote=”madcapone”:39f61j69]Olá! Descobri que é Oracle 10g, client 10.1.3. Isso ajuda a identificar onde fica o profile?
[/quote]O profile, ou melhor o .profile (tem um ponto na frente do nome, fica no diretório raíz do usuário, mas se você não entende de Linux, é perigoso altera-lo.
Você pode dar o comando ls -la assim que se logar no linux e verá o arquivo…4 de abril de 2008 às 8:00 pm #81611madcapone
ParticipanteOi, Márcio! Na verdade, acho que ele estava falando de um profile do client do Oracle … mas não tenho certeza! Mesmo assim, obrigado! Vou dar uma olhada!
Não sei muito de Linux, mas entendo de programação, não vou fazer besteira, não se preocupe. =) De qualquer forma, só altero o que entender.
No mais, descobri um arquivo dentro da pasta do Oracle
/u01/app/oracle/product/10.1.3/Apache/Apache/bin
chamado apachectl com a seguinte entrada:NLS_LANG=${NLS_LANG=”AMERICAN_AMERICA.WE8ISO8859P1″}; export NLS_LANG
Fiz a seguinte alteração:
#NLS_LANG=${NLS_LANG=”AMERICAN_AMERICA.WE8ISO8859P1″}; export NLS_LANG
NLS_LANG=${NLS_LANG=”BRAZILIAN PORTUGUESE_BRAZIL.WE8ISO8859P1″}; export NLS_LANGe depois restartei o Apache (service httpd restart).
Mesmo assim o erro persiste!! =( =( =(
Tá ruim o trem …5 de abril de 2008 às 6:18 pm #81615madcapone
ParticipanteEu executei
LANG=pt_BR.iso88591
export LANGe reiniciei o Apache. Ainda assim os resultados obtidos não exibem corretamente os caracteres acentuados.
Esse comandos são suficientes para alterar as configurações locais no UNIX? Percebi que não importa o que eu digite em LANG= não há mensagem de erro. Como saber se o valor digitado é reconhecido?
Obrigado.
-
AutorPosts
- Você deve fazer login para responder a este tópico.