Hola

Estoy administrando una base de datos que requiere que algunos datos se 
almacenen encriptados. Todo funciona correctamente excepto cuando debo 
encriptar alguna cadena que contiene acentos o eñes. A continuación les muestro 
la configuración de mi sistema y un ejemplo de lo que está ocurriendo. 

Saludos

[root@crypto ~]# locale
LANG=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=

[root@crypto ~]# yum install postgresql-server postgresql-contrib
Setting up Install Process...

[root@crypto ~]# su -l postgres -c "/usr/bin/initdb 
--pgdata='/var/lib/pgsql/data' --auth='ident' --locale='es_ES.ISO-8859-1'"
...
El cluster será inicializado con configuración local es_ES.ISO-8859-1.
La codificación por omisión ha sido por lo tanto definida a LATIN1.
La configuración de búsqueda en texto ha sido definida a «spanish».
...

[root@crypto ~]# service postgresql start
Iniciando servicios postgresql:                            [  OK  ]

[root@crypto ~]# su - postgres -c "createdb -E LATIN1 db_prueba"

[root@crypto ~]# su - postgres -c "psql db_prueba"
psql (8.4.8)
Digite «help» para obtener ayuda.

db_prueba=# \l
                                      Listado de base de datos
  Nombre   |  Dueño  | Codificación |    Collation     |      Ctype       |     
 Privilegios
-----------+----------+---------------+------------------+------------------+-----------------------
 db_prueba | postgres | LATIN1        | es_ES.ISO-8859-1 | es_ES.ISO-8859-1 |
 postgres  | postgres | LATIN1        | es_ES.ISO-8859-1 | es_ES.ISO-8859-1 |
 template0 | postgres | LATIN1        | es_ES.ISO-8859-1 | es_ES.ISO-8859-1 | 
=c/postgres
                                                                            : 
postgres=CTc/postgres
 template1 | postgres | LATIN1        | es_ES.ISO-8859-1 | es_ES.ISO-8859-1 | 
=c/postgres
                                                                            : 
postgres=CTc/postgres
(4 filas)

db_prueba=# SHOW server_encoding ;
 server_encoding
-----------------
 LATIN1
(1 fila)

db_prueba=# SHOW client_encoding ;
 client_encoding
-----------------
 LATIN1
(1 fila)

db_prueba=# CREATE TABLE tb_prueba (id serial, cadena text);
NOTICE:  CREATE TABLE crear¦ una secuencia impl¦cita ¦tb_prueba_id_seq¦ para la 
columna serial ¦tb_prueba.id¦
CREATE TABLE

db_prueba=# INSERT INTO tb_prueba (cadena) VALUES ('Adrián');
INSERT 0 1

db_prueba=# SELECT * FROM tb_prueba;
 id | cadena
----+---------
  1 | Adrián
(1 fila)

db_prueba=# \i /usr/share/pgsql/contrib/pgcrypto.sql
...

db_prueba=# CREATE TABLE tb_prueba_crypto (id serial, crypto bytea);
NOTICE:  CREATE TABLE crear¦ una secuencia impl¦cita ¦tb_prueba_crypto_id_seq¦ 
para la columna serial ¦tb_prueba_crypto.id¦
CREATE TABLE

db_prueba=# INSERT INTO tb_prueba_crypto (crypto) VALUES 
(encrypt('Adrian'::bytea,'password'::bytea,'bf-ecb/pad:pkcs'));
INSERT 0 1

db_prueba=# INSERT INTO tb_prueba_crypto (crypto) VALUES 
(encrypt('Adrián'::bytea,'password'::bytea,'bf-ecb/pad:pkcs'));
INSERT 0 1

db_prueba=# SELECT id, decrypt(crypto,'password'::bytea,'bf-ecb/pad:pkcs') FROM 
tb_prueba_crypto;
 id |    decrypt
----+---------------
  1 | Adrian
  2 | Adri\303\241n
(2 filas)
-
Enviado a la lista de correo pgsql-es-ayuda ([email protected])
Para cambiar tu suscripci�n:
http://www.postgresql.org/mailpref/pgsql-es-ayuda

Responder a