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

Hvordan ændrer man tegnkodningen af ​​en postgres-database?

For det første er Daniels svar den rigtige, sikre mulighed.

For det specifikke tilfælde med at skifte fra SQL_ASCII til noget andet, kan du snyde og simpelthen stikke i pg_database-kataloget for at omtildele databasekodningen. Dette forudsætter, at du allerede har gemt ikke-ASCII-tegn i den forventede kodning (eller at du simpelthen ikke har brugt nogen ikke-ASCII-tegn).

Så kan du gøre:

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

Dette vil ikke ændre sammenstillingen af ​​databasen, bare hvordan de kodede bytes konverteres til tegn (så nu length('£123') vil returnere 4 i stedet for 5). Hvis databasen bruger 'C'-sortering, bør der ikke ændres på rækkefølgen for ASCII-strenge. Du bliver sandsynligvis nødt til at genopbygge alle indekser, der indeholder ikke-ASCII-tegn.

Caveat emptor. Dumping og genindlæsning giver mulighed for at kontrollere, at dit databaseindhold faktisk er i den kodning, du forventer, og det gør det ikke. Og hvis det viser sig, at du havde nogle forkert kodede data i databasen, bliver det svært at redde. Så hvis du overhovedet kan, dump og geninitialiser.



  1. Ydelsesovervejelser for midlertidige data i Oracle

  2. Mysql Forbedre søgeydelsen med jokertegn (%%)

  3. Sådan bruger du Decode i Oracle

  4. WHERE-sætning på SQL Server Tekstdatatype