Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the breadcrumb-navxt domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /home/devtools/public_html/blog/wp-includes/functions.php on line 6131

Deprecated: A função WP_Dependencies->add_data() foi chamada com um argumento que está obsoleto desde a versão 6.9.0! Os comentários condicionais do IE são ignorados por todos os navegadores compatíveis. in /home/devtools/public_html/blog/wp-includes/functions.php on line 6131
Retirando acentuação no PostgreSQL

Retirando acentuação no PostgreSQL

Cotidianamente vejo tópicos em fóruns pela web a fora que discutem a questão dos caracteres especiais no banco de dados, inúmeras discussões sobre Charset e Collation a ser utilizado para inibir problemas.

Se bem pensado no início do desenvolvimento, a situação pode ser até fácil de se contornar, adotando medidas simples no momento de alimentar os dados, ou a forma de alimentar.

Pensando em uma situação em que não podemos aceitar a inserção de caracteres acentuados em nosso banco de dados, vamos criar uma função em PostgreSQL em que remove os caracteres acentuados.

Para isto utilizaremos a função Translate existente no PostgreSQL, que tem a seguinte especificação:

Tipo: Function (translate(string text, from text, to text)
Retorno: Text
Exemplo: translate(‘12345′, ’14’, ‘ax’)
Resultado: a23x5

No exemplo acima, retirado da documentação do PostgreSQL, temos a substituição dos numerais 1 e 4 pelos alfanuméricos a e x respectivamente, algo bem semelhante ao replace.

Mas deixando de enrolação, vamos a função para retirar a acentuação.

Atualizado em: 01/08/2015 – Sugestão do colega Wagner Ciprian.

 CREATE OR REPLACE FUNCTION retira_acentuacao(p_texto text)  
  RETURNS text AS  
 $BODY$  
 Select translate($1,  
 'áàâãäåaaaÁÂÃÄÅAAAÀéèêëeeeeeEEEÉEEÈìíîïìiiiÌÍÎÏÌIIIóôõöoooòÒÓÔÕÖOOOùúûüuuuuÙÚÛÜUUUUçÇñÑýÝ',  
 'aaaaaaaaaAAAAAAAAAeeeeeeeeeEEEEEEEiiiiiiiiIIIIIIIIooooooooOOOOOOOOuuuuuuuuUUUUUUUUcCnNyY'   
  );  
 $BODY$  
 LANGUAGE sql VOLATILE  
 COST 100;  

Com o uso do Translate, mapeei todos os caracteres acentuados que não devem ser aceitos, e para corrigi-los, especifiquei quais os caracteres deveriam substituí-los, simples assim.

Espero mais um vez ter sido útil a você, lembrando que sugestões de matérias, críticas ou elogios serão sempre bem vindos.

8 comentários em “Retirando acentuação no PostgreSQL”

  1. Funcionou !
    Somente acrescentei alguns caracteres:

    'áàâãäåaaaÁÂÃÄÅAAAÀéèêëeeeeeEEEÉEEÈìíîïìiiiÌÍÎÏÌIIIóôõöoooòÒÓÔÕÖOOOùúûüuuuuÙÚÛÜUUUUçÇñÑýÝ',
    'aaaaaaaaaAAAAAAAAAeeeeeeeeeEEEEEEEiiiiiiiiIIIIIIIIooooooooOOOOOOOOuuuuuuuuUUUUUUUUcCnNyY'

    Obrigado!

    Att: Wagner Cipriano

  2. Bom dia, é possivel utilizar uma function no postgresql para que ao inserir uma nova linha, em qualquer tabela que seja, a function já altere a string, removendo acentos e colocando tudo em upper case para que seja salvo no banco? isso tanto no insert quanto no update. Tenho uma aplicação para dar manutenção, tem mais de 120 tabelas, as consultas utilizam hibernate e os caracteres acentuados não são localizados, em vez de sair mexendo todo o código do sistema (imenso) ajustando para quando salvar tratar a string, eu gostaria de fazer isso no banco, é possível?Alguma ajuda?

  3. Segue minha contribuição com o máximo de caracteres que mapiei ate o momento:

    ‘åÅØÐßñÑýÝÀÁÃÄäãáàËÉÈÊêëéèÏÍÌÎîïíìÖÓÔôöóÒòÕõÙùÚúÜüÛûÇ窺°³²¹¬¢£³²¹§@#$%!¨&*()-+=[]{}^~´`?/:;,\|”_ÞÆŒ’

    ‘aAODBnNyYAAAAaaaaEEEEeeeeIIIIiiiiOOOoooOoOoUuUuUuUuCcaoo321’

    @alisssoncardoso

Deixe um comentário