que tienen una base de datos que se creó con el juego de caracteres predeterminado SQL_ASCII. Quiero cambiarlo a UNICODE. ¿Hay una manera fácil de hacer eso?¿Cómo se cambia la codificación de caracteres de una base de datos postgres?
Respuesta
Para cambiar la codificación de la base de datos:
- un volcado de la base de datos
- Caída de su base de datos,
- Crear nueva base de datos con la codificación diferente
- volver a cargar los 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
En lo que no obtengo del enlace es "Compruebe si el archivo de volcado creado en el primer paso tiene caracteres especiales y realice los cambios necesarios" => ¿Tengo que cambiar manualmente todos los cha especiales? racters – spankmaster79
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 empujar el catálogo pg_database reasignar la codificación de la base de datos. Esto supone que ya ha almacenado todos los caracteres no ASCII en la codificación esperada (o que simplemente no han utilizado todos los caracteres no ASCII).
A continuación, puede hacer:
update pg_database set encoding = pg_char_to_encoding('UTF8') where datname = 'thedb'
Esto no va a cambiar la intercalación de la base de datos, cómo los bytes codificados se convierten en caracteres (por lo que ahora length('£123')
volverán 4 en vez de 5). Si la base de datos utiliza la intercalación 'C', no debería haber cambios en el orden de las cadenas ASCII. Sin embargo, es probable que necesite reconstruir cualquier índice que contenga caracteres que no sean ASCII.
caveat.emptor. El volcado y la recarga proporcionan 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 tiene algunos datos codificados incorrectamente en la base de datos, el rescate será difícil. Entonces, si puedes, puedes volcar y reiniciar.
+1 Gracias. Mi máquina dev usa codificación UTF8, pero mi producción usa LATIN1. Estaba teniendo muchos errores debido a esto. –
Me está dando este error: '-bash: error de sintaxis cerca del token inesperado' ('' –
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 provocar daños en los datos. codificación de datos se debe establecer antes de los datos se inserta en la base de datos.
Comprobar this: Al copiar cualquier otra base de datos, la codificación y la configuración regional no se puede cambiar a los de la base de datos fuente, porque eso podría resultar en datos corruptos.
Y this: Algunas categorías de localización 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 fija o índices en columnas de texto habría corrompido. (Pero puede aliviar esta restricción utilizando colaciones, como se describe 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 Comando CREATE DATABASE.
yo preferiría reconstruir todo desde el principio correctamente con una codificación local correcta de su sistema operativo Debian como se explica here:
su root
volver a configurar los ajustes locales:
dpkg-reconfigure locales
Elige su localidad (como por ejemplo para el francés en Suiza: fr_CH.UTF8)
desinstalar y limpia adecuadamente 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 automáticamente se puede crear con la codificación correcta, LC_TYPE (clasificación de caracteres), y LC_COLLATE (orden de clasificación de cadena). La respuesta de
Daniel Kutik es correcta, pero puede ser aún más seguro, con el cambio de nombre de base de datos .
Por lo tanto, la forma verdaderamente seguro es:
- Crear nueva base de datos con la codificación diferente y el nombre
- un volcado de la base de datos
- Restaurar volcado a la nueva base de datos
- de prueba que se ejecuta la aplicación correctamente con el nuevo DB
- Renombrar DB antiguo a algo significativo
- Renombrar nuevo DB aplicación
- prueba de nuevo
- La caída de la antigua base de datos
En caso de emergencia, simplemente cambiar el nombre de DB volver
- 1. Obtener la codificación de una base de datos de Postgres
- 2. En Oracle, ¿cómo se cambia la base de datos 'predeterminada'?
- 3. Convertir la base de datos de Postgres en una base de datos espacial
- 4. Codificación de caracteres JDBC
- 5. Cómo cambiar la codificación de la base de datos phpMyAdmin
- 6. Cómo convertir una base de datos postgres a sqlite
- 7. Mysql cambia el juego de caracteres predeterminado de la tabla al conjunto de caracteres de la base de datos
- 8. Copiar base de datos en postgres
- 9. Codificación de caracteres de textarea
- 10. Caracteres extraños de la base de datos PHP MySQL
- 11. Postgres Creación esquema de una base de datos específica
- 12. Bases de datos, codificación de caracteres, archivos PDF y XML
- 13. Copie una base de datos postgres sin permisos LOCK
- 14. cómo detectar y corregir la codificación de caracteres en una base de datos mysql a través de php?
- 15. Cómo convertir la codificación de la base de datos de MS Access a UTF-8?
- 16. importando archivo osm en una base de datos postgres/postgis
- 17. ¿Cómo insertar caracteres especiales en una base de datos?
- 18. UTF8 Postgresql Crear base de datos como MySQL (incluyendo el conjunto de caracteres, la codificación y lc_type)
- 19. ¿Cómo se cambia el propietario de una base de datos en sql?
- 20. Base de datos de creación de usuarios de Postgres
- 21. ¿Cómo crear una copia de seguridad de una sola tabla en una base de datos postgres?
- 22. mangento en la base de datos postgres u oracle?
- 23. ¿Cómo encontrar la ruta URL a una base de datos local de postgres?
- 24. ¿Cómo escucho de base de datos SQL Server cambia
- 25. ¿Dónde se guardan los archivos de la base de datos de Postgres en ubuntu?
- 26. ¿Cómo insertar caracteres arábigos en la base de datos sql?
- 27. Node.js postgres + gestión de transacciones de base de datos
- 28. JSON codificación de caracteres
- 29. ¿Por qué DOM cambia la codificación?
- 30. ¿Cómo corrijo la codificación de caracteres de un archivo?
Véase también http://stackoverflow.com/q/380924 – dsh
posible duplicado de [¿Cómo puede cambio la codificación de la base de datos para una base de datos PostgreSQL usando sql o phpPgAdmin?] (http://stackoverflow.com/questions/380924/how-can-i-change-database-encoding-for-a-postgresql-database-using-sql -o-phppga) – l0b0