Apenas me sucedió que al estar trabajando un sistema con JSP y PostgreSQL (v8.3) al tratar de generar y guardar un registro que tuviera un carácter latino (para ser preciso un acento [´] ), provocaba el siguiente error:
carácter 0xc293 de codificación «UTF8» no tiene equivalente en «WIN1252»
Esto era debido a la codificación de mi base de datos (se encontraba en WIN1252) por lo que tenia que cambiarla a UTF8 o bien LATIN1, busque información en google donde encontré el siguiente link que fue de gran ayuda. Basándome en la explicación del link anterior explico como cambiar la codificación desde pgAdmin II (aunque debe ser igual desde línea de comandos) , los pasos son los siguientes:
1.- Conocer los tipos de datos soportados por PostgreSQL los encontramos en: http://www.postgresql.org/docs/8.0/interactive/multibyte.html
2.- Basándonos en la tabla ejecutar el siguiente comando en la consola SQL
1: update pg_database set encoding=8 where datname='mibd';
Donde encoding se refiere al tipo de codificación en este caso el “8” corresponde a LATIN1 y datname es el nombre de nuestra base de datos a la cual le queremos cambiar la codificación (en este caso nuestra base de datos se llama mibd).
Para identificar el tipo de encoding correspondiente a su numero entero he creado la siguiente tabla:
N° de encoding |
Name |
Descripción |
0 |
SQL_ASCII |
ASCII |
1 |
EUC_JP |
Japanese EUC |
2 |
EUC_CN |
Chinese EUC |
3 |
EUC_KR |
Korean EUC |
4 |
JOHAB |
Korean EUC (Hangle base) |
5 |
EUC_TW |
Taiwan EUC |
6 |
UNICODE |
Unicode (UTF-8) |
7 |
MULE_INTERNAL |
Mule internal code |
8 |
LATIN1 |
ISO 8859-1/ECMA 94 (Latin alphabet no.1) |
9 |
LATIN2 |
ISO 8859-2/ECMA 94 (Latin alphabet no.2) |
10 |
LATIN3 |
ISO 8859-3/ECMA 94 (Latin alphabet no.3) |
11 |
LATIN4 |
ISO 8859-4/ECMA 94 (Latin alphabet no.4) |
12 |
LATIN5 |
ISO 8859-9/ECMA 128 (Latin alphabet no.5) |
13 |
LATIN6 |
ISO 8859-10/ECMA 144 (Latin alphabet no.6) |
14 |
LATIN7 |
ISO 8859-13 (Latin alphabet no.7) |
15 |
LATIN8 |
ISO 8859-14 (Latin alphabet no.8) |
16 |
LATIN9 |
ISO 8859-15 (Latin alphabet no.9) |
17 |
LATIN10 |
ISO 8859-16/ASRO SR 14111 (Latin alphabet no.10) |
18 |
ISO_8859_5 |
ISO 8859-5/ECMA 113 (Latin/Cyrillic) |
19 |
ISO_8859_6 |
ISO 8859-6/ECMA 114 (Latin/Arabic) |
20 |
ISO_8859_7 |
ISO 8859-7/ECMA 118 (Latin/Greek) |
21 |
ISO_8859_8 |
ISO 8859-8/ECMA 121 (Latin/Hebrew) |
22 |
KOI8 |
KOI8-R(U) |
23 |
ALT |
Windows CP866 |
24 |
WIN874 |
Windows CP874 (Thai) |
25 |
WIN1250 |
Windows CP1250 |
26 |
WIN |
Windows CP1251 |
27 |
WIN1256 |
Windows CP1256 (Arabic) |
28 |
TCVN |
TCVN-5712/Windows CP1258 (Vietnamese) |
Con esta tabla sabremos que numero corresponde a que codificación siendo así, por ejemplo si quisiera cambiar la codificación de mi tabla a UTF-8 tendría el siguiente código:
1: update pg_database set encoding=6 where datname='mibd';
Como pueden ver es muy sencillo espero sea de utilidad, como lo fue para mi ;).
-.-. Los comentaros son motivos para continuar con el blog .-.-
Update de utilidad: Configuración actual del sistema para no tener problemas con acentos(´) ni eñes (ñ):
PostgreSQL: LATIN1
Dreamweaver: charset=iso-8859-1
Hola,,, ioe un favor.. me podrias decir de donde sacaste esa tabla,,, quiero sabes si realizaste un quierie para verla o como la sacaste,, por q necesito hacer un boton tipo select sin necesidad de escibir todos esos,, me harias un gran paro,,
Que tal ya cambié todo de PostgreSQL y el dreamweaver si lo tengo configurado así, el problema que tengo al jalar un dato via php y éste dato trae una Ñ me aparcce algo asi como Ñ en lugar de la Ñ no sabes como poder corregir esto?
Saludos
jaja sorry por las faltas de ortografia… query!!!!!
*Supongo te refieres a la tabla de codificación.
En el post dice de donde la saque: http://www.postgresql.org/docs/8.0/interactive/multibyte.html — ES LA PAGINA DE POSTGRESQL =D, no realice ninguna consulta(query) para sacarla solo visite la pagina. =D Saludos
hey muchas gracias me funcionó perfect…jejeje solo un comentario para Dummies… este código se corre desde un sql de la base de datos…
saludos y muchas gracias
Hola
Es muy buena la ayuda que brindas…
Tengo una consulta..
Yo trabajo con un ERP Adempiere en Postgres 8.3.7, necesito cambiar la codificación actualmente tengo UTF8 porque al hacer un copy desde un archivo de datos no pude por las tildes, ñ y demás caracteres especiales.
Que complicaciones funcionales tendría al cambiar la codificación de la mi DB?.
Gracias.. Espero tu respuesta.
Saludos
Con mi experiencia, no hubo problema alguno al cambiar de UTF8 a Latin1 , aunque con una consulta SQL de la siguiente forma:
query donde se emplea la codificacion LATIN1
SELECT CODIGO_CP, COLONIA_CP, ESTADO_CP, CIUDAD_CP, MNPIO_CP
FROM CAT_CPOSTALES
WHERE TO_ASCII(COLONIA_CP, ‘LATIN1’) LIKE ‘%BENITO JUAREZ%’ ORDER BY ESTADO_CP
Esta consulta ignara los caracteres especiales (acentos, ñ, etc..) en los resultados , por lo que si ponemos BENITO JUAREZ en los resultados no podria traer DON BENITO JÚAREZ , observar la U tiene acento , con una consulta normal (sin el to_ascii LATIN1) este resultado no seria mostrado.
😛
Carnalito…. gracias por esta información. Sin duda alguna Postgres me acepto «ñ», acentos y demas.
Me cae que pegue un brinco cuando vi como me aceptaba estos caracteres.
Gracias….
tenía el mismo problema con (á,é…ú) Ññ, las solución fue
consultar qeu codificación tenía mi base
select * from pg_database
realizar un update para cambira la codifiación estaba en 6
update pg_database set encoding=8 where datname=’mibasedatos’;
ver si el cambio se realizó
select * from pg_database
insertar registro para verificar el cambio
ahora funciona
gracias por la info, buenisima, me estaba volviendo loco con los acentos
En su momento esto fue de gran utilidad pero actualmente si instalas las versiones de postgres 8.4 en adelante con UNICODE UTF-8 acepta todos los caracteres
un ejemplo seria asi:
para Exportar
copy novedad to ‘/planos/novedad’ BINARY
donde novedad es el nombre de mi tabla
planos/novedad la ruta donde quedará el archivo plano con el nombre igual al de mi tabla.
Binary es la forma en que deseo grabar mi archivo plano donde puede ser CSV o el que vos elijas.
Para Importar solo cambias el To por el from y listo
copy novedad from ‘/planos/novedad’ BINARY
tengo un problema que cuando realizo el update me da este error. ERROR: permission denied for relation pg_database, que debo hacer ?
Hola he realizado las siguientes adaptaciones a mi codigo:
use Encode;
use utf8;
use CGI qw(:standard);
use CGI::Carp qw(fatalsToBrowser);
use DBI;
binmode STDOUT, «:utf8″;
print
header( -charset =>»utf8»),
start_html(‘CGI MINIMO’);
Empleo:
$causa= decode_utf8($ref_eventos->{‘causa’}); ##Descripcion de caracteres especiales
Y no visualizo caracteres especiales, alguna otra idea?
Apesar que posgres utiliza el UTF8 por default, me asegure configurando el SET CLIENT_ENCODING TO ‘UTF8’
Y no obtengo el resultado correcto, alguien me puede apoyar descifrando que esta sucediendo con mi servidor, gracias.
exelente
Hola, en vez de cambiar la codificación de toda una base de datos, ¿se podría cambiar únicamente unas de las tablas de dicha BD?
Gracias
Fe de erratas: Hola, en vez de cambiar la codificación de toda una base de datos, ¿se podría cambiar únicamente la codificación de una de las tablas de dicha BD?
Gracias