sql >> Base de Datos >  >> RDS >> PostgreSQL

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

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 utiliza 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.