Vider une base de données avec un encodage spécifique et essayer de la restaurer sur une autre base de données avec un encodage différent peut entraîner une corruption des données. L'encodage des données doit être défini AVANT l'insertion de toute donnée dans la base de données.
Vérifiez ce : Lors de la copie de toute autre base de données, les paramètres d'encodage et de paramètres régionaux ne peuvent pas être modifiés par rapport à ceux de la base de données source, car cela pourrait entraîner la corruption des données.
Et ce : Certaines catégories de paramètres locaux doivent avoir leurs valeurs fixées lors de la création de la base de données. Vous pouvez utiliser des paramètres différents pour différentes bases de données, mais une fois qu'une base de données est créée, vous ne pouvez plus les modifier pour cette base de données. LC_COLLATE et LC_CTYPE sont ces catégories. Ils affectent l'ordre de tri des index, ils doivent donc être maintenus fixes, sinon les index sur les colonnes de texte seraient corrompus. ( Mais vous pouvez atténuer cette restriction en utilisant les collations, comme indiqué dans la Section 22.2. ) Les valeurs par défaut de ces catégories sont déterminées lors de l'exécution de initdb, et ces valeurs sont utilisées lors de la création de nouvelles bases de données, sauf indication contraire dans la commande CREATE DATABASE.
Je préfèrerais tout reconstruire depuis le début correctement avec un encodage local correct sur votre OS Debian comme expliqué aquí :
su root
Reconfigurez vos paramètres locaux :
dpkg-reconfigure locales
Choisissez votre locale (comme par exemple pour le français en Suisse : fr_CH.UTF8)
Désinstaller et nettoyer correctement 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
Réinstaller postgresql :
aptitude install postgresql-9.1 postgresql-contrib-9.1 postgresql-doc-9.1
Maintenant, toute nouvelle base de données sera automatiquement créée avec un encodage correct, LC_TYPE (classification des caractères), et LC_COLLATE (ordre de tri des chaînes de caractères).
1 votes
Voir aussi stackoverflow.com/q/380924
1 votes
Duplicata possible de Comment puis-je changer l'encodage d'une base de données PostgreSQL en utilisant sql ou phpPgAdmin ?