PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment changer l'encodage des caractères d'une base de données postgres ?

Tout d'abord, la réponse de Daniel est l'option correcte et sûre.

Pour le cas spécifique du passage de SQL_ASCII à autre chose, vous pouvez tricher et simplement pousser le catalogue pg_database pour réaffecter l'encodage de la base de données. Cela suppose que vous avez déjà stocké des caractères non-ASCII dans l'encodage attendu (ou que vous n'avez tout simplement pas utilisé de caractères non-ASCII).

Ensuite, vous pouvez faire :

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

Cela ne changera pas le classement de la base de données, juste la façon dont les octets encodés sont convertis en caractères (donc maintenant length('£123') renverra 4 au lieu de 5). Si la base de données utilise le classement 'C', il ne devrait y avoir aucun changement dans l'ordre des chaînes ASCII. Cependant, vous devrez probablement reconstruire tous les index contenant des caractères non ASCII.

Caveat emptor. Le vidage et le rechargement fournissent un moyen de vérifier que le contenu de votre base de données est bien dans l'encodage que vous attendez, et ce n'est pas le cas. Et s'il s'avère que vous avez des données mal encodées dans la base de données, le sauvetage sera difficile. Donc, si vous le pouvez, videz et réinitialisez.