sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur ändrar man teckenkodningen i en postgres-databas?

För det första är Daniels svar det korrekta, säkra alternativet.

För det specifika fallet att byta från SQL_ASCII till något annat, kan du fuska och helt enkelt peta i pg_database-katalogen för att omtilldela databaskodningen. Detta förutsätter att du redan har lagrat några icke-ASCII-tecken i den förväntade kodningen (eller att du helt enkelt inte har använt några icke-ASCII-tecken).

Sedan kan du göra:

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

Detta kommer inte att ändra sammanställningen av databasen, bara hur de kodade byten omvandlas till tecken (så nu length('£123') kommer att returnera 4 istället för 5). Om databasen använder 'C'-sortering, bör det inte göras någon ändring av beställningen för ASCII-strängar. Du kommer förmodligen att behöva bygga om alla index som innehåller icke-ASCII-tecken.

Varning emptor. Dumpning och omladdning ger ett sätt att kontrollera att ditt databasinnehåll faktiskt är i den kodning du förväntar dig, och det gör det inte. Och om det visar sig att du hade en del felaktigt kodad data i databasen, kommer det att bli svårt att rädda. Så om du kan, dumpa och återinitiera.



  1. Använda subquery i en Check-sats i Oracle

  2. My 11g Optimizer Stats Job Quit on Me – Fixed

  3. MySQL, Få användarrankning

  4. Inaktivera och senare aktivera alla tabellindex i Oracle