Saltar al contenido

¿Cómo cambia la codificación de caracteres de una base de datos postgres?

Tenemos el arreglo a esta incógnita, al menos eso pensamos. Si continuas con dudas dínoslo, que sin dudarlo te ayudaremos

Solución:

En primer lugar, la respuesta de Daniel es la opción correcta y segura.

Para el caso específico de cambiar de SQL_ASCII a otra cosa, puede hacer trampa y simplemente tocar el catálogo pg_database para reasignar la codificación de la base de datos. Esto supone que ya ha almacenado caracteres que no son ASCII en la codificación esperada (o que simplemente no ha utilizado ningún carácter que no sea ASCII).

Entonces puedes hacer:

update pg_database set encoding = pg_char_to_encoding('UTF8') where datname = 'thedb'

Esto no cambiará la intercalación de la base de datos, solo cómo los bytes codificados se convierten en caracteres (así que ahora length('£123') devolverá 4 en lugar de 5). Si la base de datos usa la intercalación ‘C’, no debería haber cambios en el orden de las cadenas ASCII. Sin embargo, es probable que deba reconstruir cualquier índice que contenga caracteres que no sean ASCII.

Emptor de advertencia. Volcar y recargar proporciona una forma de verificar que el contenido de su base de datos esté realmente en la codificación que espera, y esto no es así. Y si resulta que tenía algunos datos codificados incorrectamente en la base de datos, el rescate será difícil. Entonces, si puede, descargue y reinicie.

Para cambiar la codificación de su base de datos:

  1. Volcar su base de datos
  2. Deja tu base de datos,
  3. Crear nueva base de datos con la codificación diferente
  4. Recarga tus datos.

Asegúrese de que la codificación del cliente esté configurada correctamente durante todo esto.

Fuente: http://archives.postgresql.org/pgsql-novice/2006-03/msg00210.php

Volcar una base de datos con una codificación específica e intentar restaurarla en otra base de datos con una codificación diferente podría dañar los datos. La codificación de datos debe establecerse ANTES de que se inserten datos en la base de datos.

Mira esto :
Al copiar cualquier otra base de datos, la codificación y la configuración regional no se pueden cambiar de las de la base de datos de origen, ya que eso podría dañar los datos.

Y esto :
Algunas categorías de configuración regional deben tener sus valores fijos cuando se crea la base de datos. Puede usar diferentes configuraciones para diferentes bases de datos, pero una vez que se crea una base de datos, ya no puede cambiarlas para esa base de datos. LC_COLLATE y LC_CTYPE son estas categorías. Afectan el orden de clasificación de los índices, por lo que deben mantenerse fijos, o los índices de las columnas de texto se dañarían. (Pero puede aliviar esta restricción utilizando intercalaciones, como se explica en la Sección 22.2.) Los valores predeterminados para estas categorías se determinan cuando se ejecuta initdb y esos valores se usan cuando se crean nuevas bases de datos, a menos que se especifique lo contrario en el comando CREATE DATABASE.


Preferiría reconstruir todo correctamente desde el principio con una codificación local correcta en su sistema operativo Debian como se explica aquí:

su root

Vuelva a configurar su configuración local:

dpkg-reconfigure locales

Elija su configuración regional (como, por ejemplo, para francés en Suiza: fr_CH.UTF8)

Desinstale y limpie correctamente postgresql:

apt-get --purge remove postgresql*
rm -r /etc/postgresql/
rm -r /etc/postgresql-common/
rm -r /var/lib/postgresql/
userdel -r postgres
groupdel postgres

Vuelva a instalar postgresql:

aptitude install postgresql-9.1 postgresql-contrib-9.1 postgresql-doc-9.1

Ahora cualquier nueva base de datos se creará automáticamente con la codificación correcta, LC_TYPE (clasificación de caracteres) y LC_COLLATE (string Orden de clasificación).

Si posees alguna indecisión o forma de reformar nuestro sección te inspiramos ejecutar una referencia y con mucho gusto lo ojearemos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *