Un punto a tener en cuenta a la hora de almacenar contenido mediante un gestor de bases de datos, es la codificación de los caracteres. Ya que disponemos de varios codificadores que nos permiten convertir nuestro alfabeto en pulsos eléctricos. Entre tantos encoders que podemos utilizar, se destacan la norma ASCII, la norma Unicode y el estándar UTF-8. Este último es el que debemos de utilizar en nuestro sistema gestor de bases de datos.
Averiguar el codificador utilizado en Postgres
Antes de nada, tenemos que saber cuál es el encoding que hemos establecido para nuestro servidor PostgreSQL. Tenemos varias formas de resolver este enigma, dependiendo del tipo de cliente que estemos utilizando.
Si utilizamos un cliente gráfico, como pgAdmin4, debemos de ver en las propiedades de nuestra base de datos cuál es la codificación asignada.
En cambio, si nos decantamos por la consola de comandos, ejecutamos el metacomando \l de psql.
Independientemente del cliente que utilicemos, podemos saber cuál es el codificador de caracteres que tenemos asignado en el servidor Postgres y en el cliente con la instrucción SHOW.
Para conocer el encoding establecido en el servidor PostgreSQL, debemos de ejecutar la siguiente sentencia:
SHOW server_encoding;
Para saber el encoding que está utilizando el cliente que estamos usando, ejecutamos esta otra:
SHOW client_encoding;
También podemos averiguar el tipo de codificación de caracteres establecidos mediante una consulta a la tabla character_sets. La sentencia es la siguiente:
SELECT * FROM information_schema.character_sets;
Establecer codificación de caracteres en el servidor Postgres
Podemos establecer una codificación predeterminada para todas las bases de datos en el momento de crear el directorio de almacenamiento de datos (PGDATA). Esto se realiza cuando ejecutamos el comando initdb, ya sea desde instalador gráfico o de forma manual. En el caso que ejecutemos el comando initdb de forma manual para crear el directorio PGDATA, debemos de indicarle la opción “E” para establecer la codificación. La ejecución del comando completo se vería así:
initdb -D /directorio/pgdata -E utf8
Si ya tenemos creado el directorio PGDATA con un encoding diferente, podemos crear una nueva base de datos estableciendo el codificador deseado. Se puede establecer utilizando un cliente gráfico o con la instrucción CREATE. Ejemplo de establecer encoding UTF-8 al crear una base de datos.
CREATE DATABASE newdb WITH ENCODING = 'UTF8';
Establecer codificación de caracteres en el cliente
Sin embargo, en ocasiones dependiendo del cliente que utilicemos puede haber discrepancias de codificación entre el servidor Postgres y el cliente. Por ello, debemos asegurarnos de que el cliente utilice el mismo juego de caracteres que el servidor. En caso de no ser el mismo encoding, podemos cambiarlo directamente en el cliente.
En el caso de que utilicemos el cliente estándar, tenemos disponible el metacomando \encoding para establecer la codificación necesaria en el cliente psql.
\encoding UTF8
Si utilizamos otro cliente distinto, podemos utilizar el comando SET para establecer un nuevo encoding. La ejecución del comando es el siguiente:
SET CLIENT_ENCODING TO 'UTF8';
Ejemplo de cómo cambiar el encoding en el cliente pgAdmin4.
En este ejemplo tenemos establecido el encoding Unicode en el cliente pgAdmin4 y utilizamos el comando SET para establecer la codificación UTF-8.
Con esto ya sabéis cómo averiguar el encoding que tenéis establecido en el servidor PostgreSQL y en los clientes pgAdmin4 y psql. También la forma de cambiar la codificación de caracteres tanto en el inicio del servidor, como posteriormente y en el cliente.