まず、ダニエルの答えは正しい、安全なオプションです。
SQL_ASCIIから別のものに変更する特定のケースでは、pg_databaseカタログをごまかして単純に突くと、データベースエンコーディングを再割り当てできます。これは、期待されるエンコーディングで非ASCII文字がすでに保存されている(または単に非ASCII文字を使用していない)ことを前提としています。
次に、次のことができます:
update pg_database set encoding = pg_char_to_encoding('UTF8') where datname = 'thedb'
これにより、データベースの照合が変更されることはなく、エンコードされたバイトが文字に変換される方法が変更されます(したがって、length('£123')
5ではなく4を返します)。データベースが「C」照合を使用している場合、ASCII文字列の順序に変更はありません。ただし、ASCII以外の文字を含むインデックスを再構築する必要がある可能性があります。
買い手責任負担。ダンプとリロードは、データベースのコンテンツが実際に期待するエンコーディングになっていることを確認する方法を提供しますが、そうではありません。また、データベースに誤ってエンコードされたデータが含まれていることが判明した場合、救助は困難になります。したがって、可能であれば、ダンプして再初期化してください。