Pular para o conteúdo
Visualizando 6 posts - 1 até 6 (de 6 do total)
  • Autor
    Posts
  • #101788
    mpungan
    Participante

      Estamos 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.

      #101790
      rman
      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.

        #101796
        mpungan
        Participante

          Mas 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.

          #101798
          vieri
          Participante

            Já 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.

            #101799
            vieri
            Participante

              Apenas para te situar.
              vc está buscando a solução no desenvolvimento mas isso é problema de ambiente.

              #101819
              mpungan
              Participante

                Essa 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.

              Visualizando 6 posts - 1 até 6 (de 6 do total)
              • Você deve fazer login para responder a este tópico.