Onde o UPPER não funciona o initdb usou o padrão do SO que é LC_COLLATE = en_US.UTF-8. O cliente já testei com UTF8 e LATIN1 acessando este banco e ambos dão problema.

Bene


Luigi Castro Cardeles escreveu:
Olá,

essas regras são controladas pelas variáveis LC_COLLATE e LC_CTYPE (que são definidas no initdb).
http://www.postgresql.org/docs/8.3/static/sql-createdatabase.html

Você tem que tomar cuidado também com a codificação do cliente onde você está digitando...
Qual o valor das mesmas no caso onde o upper não retorna o esperado?

Luigi Castro Cardeles


2009/4/28 Prof. Benedito A. Cruz <[email protected] <mailto:[email protected]>>

    Caros

       Recentemente tive problemas com uma aplicação que funcionava em um
    banco LATIN1 mas dava problemas em um banco UTF-8. Depois de pesquisar
    um pouco detectei o seguinte comportamento no PG.

       1) Num banco criado como LATIN1:

    postgres=# \l
           List of databases
      Name    |   Owner   | Encoding
    -----------+-----------+----------
     xpto  | xxxadm | LATIN1
     postgres  | postgres  | LATIN1
     template0 | postgres  | LATIN1
     template1 | postgres  | LATIN1
    (4 rows)

    postgres=# \c xpto
    You are now connected to database "xpto".
    xpto=# select UPPER('a');
     upper
    -------
     A
    (1 row)

    xpto=# select UPPER('á');
     upper
    -------
     Á
    (1 row)

     2) Num banco criado como UTF8:

    postgres=# \l
           List of databases
      Name    |   Owner   | Encoding
    -----------+-----------+----------
     xpto  | xxxadm | LATIN1
     postgres  | postgres  | UTF8
     template0 | postgres  | UTF8
     template1 | postgres  | UTF8
    (4 rows)

    postgres=# \c xpto
    You are now connected to database "xpto".
    xpto=# select UPPER('a');
     upper
    -------
     A
    (1 row)

    xpto=# select UPPER('á');
     upper
    -------
     á
    (1 row)

      O problema é que no segundo caso a aplicação dá erro porque usa
    UPPER
    e LOWER nas queries, que retornam com problemas. O mesmo problema
    ocorre
    se o banco "xpto" está em UTF8. A solução foi transferir o UPPER e
    LOWER
    para a aplicação e retirar da query.

      Pergunta: o comportamento dessas funções não deveria seguir o
    encoding do banco ao qual se está conectado?

    --
    Benedito A. Cruz
    Centro de Referência em Informação Ambiental - CRIA
    email [email protected] <mailto:[email protected]>
    fone 55 19 3288 0466


    --
    This message has been scanned for viruses and
    dangerous content by MailScanner, and is
    believed to be clean.

    _______________________________________________
    pgbr-geral mailing list
    [email protected]
    <mailto:[email protected]>
    https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral



--
This message has been scanned for viruses and
dangerous content by *MailScanner* <http://www.mailscanner.info/>, and is
believed to be clean.
------------------------------------------------------------------------

_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


--
Benedito A. Cruz
Centro de Referência em Informação Ambiental - CRIA
email [email protected]
fone 55 19 3288 0466

--
This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.

_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a