Re: Problema con client_encoding='WIN1251' y basede datos UTF8

From: "comarin_telefonica" <comarin(at)telefonica(dot)net>
To: "Alvaro Herrera" <alvherre(at)alvh(dot)no-ip(dot)org>
Cc: <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Problema con client_encoding='WIN1251' y basede datos UTF8
Date: 2009-05-26 11:46:40
Message-ID: 9552AB6B336F494F9D9412C7F7841E74@pc13
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Alvaro Herrera escribió:

> Conxita Marín escribió:
>
> Hola,
>
>> s001=> CREATE temp table tmp_movcostp (
>> cmp_condoid integer,
>> cmp_apunte integer,
>> cmp_ccos numeric(6,0),
>> cmp_grup integer,
>> cmp_text character varying(40),
>> cmp_imp numeric(13,2),
>> cmp_dh character(1) DEFAULT 'D'::bpchar,
>> cmp_obs character varying(500),
>> primary key (cmp_condoid, cmp_apunte)
>> );
>> ERROR: character 0xc3a1 of encoding "UTF8" has no equivalent in
>> "WIN1251"
>
> Hmm, ¿te arroja ese error al momento de crear la tabla? Eso sí que
> sería raro ... Algunas funciones pueden retornar strings en una
> codificación incorrecta, por ej. si tuvieras una función que retornara
> una fecha y el nombre del huso horario tuviera caracteres chistosos; o
> bien si usaras el tipo MONEY y el símbolo de moneda no fuera válido.
> Pero no parece que sea tu caso ...
>
> Por favor muestra la salida completa de pg_controldata

Número de versión de pg_control: 833
Número de versión del catálogo: 200711281
Identificador de sistema: 5328287122433632763
Estado del sistema de base de datos: en producción
Ãltima modificación de pg_control: mar 26 may 2009 11:56:56 CEST
Ubicación del último checkpoint: 0/BE4F074
Ubicación del checkpoint anterior: 0/BE2A174
Ubicación de REDO de último checkpoint: 0/BE4F074
TimeLineID del último checkpoint: 1
NextXID del checkpoint más reciente: 0/313622
NextOID de último checkpoint: 820018
NextMultiXactId de último checkpoint: 1
NextMultiOffset de último checkpoint: 0
Instante de último checkpoint: mar 26 may 2009 11:56:52 CEST
Punto final mínimo de recuperación: 0/0
Alineamiento máximo de datos: 4
Tamaño de bloque de la base de datos: 8192
Bloques por segmento en relación grande: 131072
Tamaño del bloque de WAL: 8192
Bytes por segmento WAL: 16777216
Máxima longitud de identificadores: 64
Máximo número de columnas de un índice: 32
Longitud máxima de un trozo TOAST: 2000
Tipo de almacenamiento de horas y fechas: enteros de 64 bits
Longitud máxima de nombres de locale: 128
LC_COLLATE: es_ES.UTF-8
LC_CTYPE: es_ES.UTF-8

>
> Oye, ¿y el terminal en que estás ejecutando esto es UTF8 también?

postgres(at)lux1:~$ locale
LANG=es_ES.UTF-8
LANGUAGE=es_ES.UTF-8
LC_CTYPE=es_ES.UTF-8
LC_NUMERIC="es_ES.UTF-8"
LC_TIME="es_ES.UTF-8"
LC_COLLATE="es_ES.UTF-8"
LC_MONETARY="es_ES.UTF-8"
LC_MESSAGES="es_ES.UTF-8"
LC_PAPER="es_ES.UTF-8"
LC_NAME="es_ES.UTF-8"
LC_ADDRESS="es_ES.UTF-8"
LC_TELEPHONE="es_ES.UTF-8"
LC_MEASUREMENT="es_ES.UTF-8"
LC_IDENTIFICATION="es_ES.UTF-8"
LC_ALL=
postgres(at)lux1:~$

>¿Si le quitas el DEFAULT la la columna cmp_dh te arroja el error?
>
Si, da exactamente el mismo error.

Es super super raro, he ido reduciendo la sentencia pero no le veo la lógica
al fallo, al final me quedo con una sentencia simple que sigue fallando.
Salgo y vuelvo a entrar (como en el chiste), recupero la sentencia que acaba
de fallar y funciona(???)

Copipego las pruebas por si sirve de algo.

...
s001=> CREATE temp table tmp_movcostp (
s001(> cmp_condoid integer,
s001(> cmp_apunte integer,
s001(> cmp_ccos numeric(6,0),
s001(> cmp_grup integer
s001(>
s001(> );
ERROR: character 0xc3a1 of encoding "UTF8" has no equivalent in "WIN1251"
s001=> CREATE temp table tmp_movcostp (
s001(> cmp_condoid integer
s001(> );
ERROR: character 0xc3a1 of encoding "UTF8" has no equivalent in "WIN1251"
s001=> \q

Bienvenido a psql 8.3.7, la terminal interactiva de PostgreSQL.

Digite: \copyright para ver los términos de distribución
\h para ayuda de órdenes SQL
\? para ayuda de órdenes psql
\g o punto y coma («;») para ejecutar la consulta
\q para salir

s001=> set client_encoding='WIN1251';
SET
s001=> CREATE temp table tmp_movcostp (
cmp_condoid integer
);
CREATE TABLE
s001=>

Saludos.

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Gabriel Ferro 2009-05-26 12:29:26 Optimizando consultas
Previous Message Javier Chávez B. 2009-05-26 11:11:19 Migrar Codigo