PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come si cambia la codifica dei caratteri di un database postgres?

Prima di tutto, la risposta di Daniel è l'opzione corretta e sicura.

Per il caso specifico di passare da SQL_ASCII a qualcos'altro, puoi imbrogliare e semplicemente sfogliare il catalogo pg_database per riassegnare la codifica del database. Ciò presuppone che tu abbia già memorizzato caratteri non ASCII nella codifica prevista (o che semplicemente non hai utilizzato caratteri non ASCII).

Allora puoi fare:

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

Questo non cambierà le regole di confronto del database, ma solo il modo in cui i byte codificati vengono convertiti in caratteri (quindi ora length('£123') restituirà 4 invece di 5). Se il database utilizza le regole di confronto "C", non dovrebbero esserci modifiche all'ordinamento delle stringhe ASCII. Probabilmente dovrai ricostruire tutti gli indici contenenti caratteri non ASCII.

Avvertimento emptore. Il dumping e il ricaricamento forniscono un modo per verificare che il contenuto del database sia effettivamente nella codifica che ti aspetti, e questo non lo fa. E se si scopre che hai dei dati codificati in modo errato nel database, il salvataggio sarà difficile. Quindi, se possibile, scarica e reinizializza.