postgresql - template - El problema de Postgres que codifica “UTF8” no tiene equivalente en la codificación de “LATIN1”
set database encoding postgresql (2)
Como se adivinó, el problema era con la codificación de cliente en la base de datos.
crd_production=# show client_encoding;
client_encoding
-----------------
LATIN1
(1 row)
Para cambiar la codificación del cliente a UTF-8, debe hacer esto
crd_production=# SET client_encoding = ''UTF8'';
SET
Revisar otra vez
crd_production=# show client_encoding;
client_encoding
-----------------
UTF8
(1 row)
Las cosas funcionan bien ahora.
Nuestro servidor de base de datos de producción de postgres tiene una base de datos llamada crd_production que nace de la base de datos de template1
template1. Por cierto, en un cuadro de Ubuntu 12.04, la codificación predeterminada de las bases de datos template1 y template0 en la creación inicial del pgcluster tenía una codificación predeterminada de LATIN1. Había eliminado la template1
db y la había creado de nuevo con una codificación utf-8 como se puede ver a continuación.
Name | Owner | Encoding | Collate | Ctype | Access privileges
----------------+----------+----------+------------+------------+-----------------------
crd_production | deployer | UTF8 | en_US.utf8 | en_US.utf8 |
postgres | postgres | UTF8 | en_US.utf8 | en_US.utf8 |
template0 | postgres | LATIN1 | en_US | en_US | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | en_US.utf8 | en_US.utf8 |
(4 rows)
Eventualmente implementamos nuestra aplicación Rails (3.2.11) y comenzamos a usar la base de datos crd_production
como la base de datos principal. No hay ningún problema cuando ActiveRecord está escribiendo / leyendo datos, pero cuando intento disparar cualquier consulta de SQL desde la línea de comando psql
en esta db, ocurre el siguiente error:
crd_production=# select * from users;
ERROR: character with byte sequence 0xe2 0x80 0x9c in encoding "UTF8" has no equivalent in encoding "LATIN1"
crd_production=# select * from features;
ERROR: character with byte sequence 0xe2 0x80 0x99 in encoding "UTF8" has no equivalent in encoding "LATIN1"
Cual podría ser el problema aquí? ¿Es un problema con el cliente?
Tengo el mismo caso antes con ruby on rails en postgresql 10. Este es el truco
update pg_database set encoding = pg_char_to_encoding(''UTF8'') where datname = ''thedb''
Fuente: ¿Cómo cambia la codificación de caracteres de una base de datos de postgres?