Locales (Idioma) e Encoding (Codificação)
Locale
Da documentação oficial traduzida pela comunidade brasileira (capítulo 20), em http://pgdocptbr.sourceforge.net/pg80/index.html:
"O PostgreSQL utiliza as facilidades de idioma ISO C e POSIX padrão fornecidas pelo sistema operacional do servidor.
O suporte a idioma (locale) exerce influência sobre as seguintes funcionalidades:
- Ordem de classificação das consultas que utilizam a cláusula ORDER BY.
- A capacidade de utilizar índices com a cláusula LIKE.
- A família de funções to_char.
A desvantagem de utilizar idiomas diferentes de C e POSIX no PostgreSQL é o impacto no desempenho. Torna a manipulação de caracteres mais lenta, e impede a utilização de índices comuns na cláusula LIKE.
Por estes motivos, a utilização de idioma diferente deve ser feita somente quando for realmente necessária."
Recomendação: deixar Locale como C e SQL_ASCII para Codificação e ao se criar algum banco com a necessidade de idioma diferente alterar a codificação.
Encoding - Codificação
O PostgreSQL oferece suporte a conjuntos de caracteres (codificação) de um único byte como a série ISO 8859 e a conjuntos de caracteres de vários bytes.
Através do comando createdb ou create database podemos indicar qual conjunto de caracteres usar nesse banco, portanto podemos ter bancos com diferentes conjuntos de caracteres.
Alguns dos conjuntos mais usados:
LATIN1 = ISO-8859-1
SQL_ASCII = ASCII
UNICODE = UFT-8
WIN1252 = Windows CP1252
Exemplos:
createdb -E LATIN1
CREATE DATABASE brasileiro WITH ENCODING 'LATIN1';
\l - mostra bancos e codificações
Importante
Usando a codificação default não poderemos converter os dados para uma outra codificação mais abrangente como os UNICODES. Caso queiramos um dia converter para uma dessas codificações devemos já usar um conjunto de caracteres de 2 bytes, como o UTF-8.
Conversão automática do conjunto de caracteres
O PostgreSQL suporta a conversão automática de conjuntos de caracteres entre o cliente e o servidor, para determinados conjuntos de caracteres.
A informação de conversão é armazenada no catálogo do sistema pg_conversion.
Podem ser criadas novas conversões utilizando o comando CREATE CONVERSION. O PostgreSQL possui algumas conversões prédefinidas, confira com:
select * from pg_conversion;
Para habilitar a conversão automática entre os conjuntos de caracteres:
- Utilizando o comando \encoding no psql. O \encoding permite mudar a codificação do cliente dinamicamente. Por exemplo, para mudar a codificação para LATIN1 deve ser executado:
\encoding LATIN1
- Utilizando o comando SET client_encoding TO. A definição da codificação do cliente pode ser feita através do comando SQL:
SET CLIENT_ENCODING TO 'valor';
Este comando também pode ser executado em uma consulta SQL em aplicativos.
Para consultar a codificação corrente do cliente:
SHOW client_encoding;
Para voltar à codificação padrão:
RESET client_encoding;
Ribamar FS – http://ribafs.net