sql >> Database >  >> RDS >> PostgreSQL

Hoe verander je de karaktercodering van een postgres-database?

Ten eerste is Daniels antwoord de juiste, veilige optie.

Voor het specifieke geval van het veranderen van SQL_ASCII naar iets anders, kun je vals spelen en gewoon de pg_database-catalogus porren om de databasecodering opnieuw toe te wijzen. Dit veronderstelt dat je al niet-ASCII-tekens hebt opgeslagen in de verwachte codering (of dat je gewoon geen niet-ASCII-tekens hebt gebruikt).

Dan kun je het volgende doen:

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

Dit verandert niets aan de sortering van de database, alleen hoe de gecodeerde bytes worden omgezet in tekens (dus nu length('£123') geeft 4 terug in plaats van 5). Als de database gebruikmaakt van 'C'-sortering, zou de volgorde voor ASCII-tekenreeksen niet moeten worden gewijzigd. U zult waarschijnlijk indexen die niet-ASCII-tekens bevatten echter opnieuw moeten opbouwen.

Voorbehoud emptor. Dumpen en opnieuw laden biedt een manier om te controleren of de inhoud van uw database daadwerkelijk de codering heeft die u verwacht, en dit niet. En als blijkt dat je verkeerd gecodeerde gegevens in de database hebt staan, wordt het moeilijk om te redden. Dus als je kunt, dump en initialiseer.



  1. TypeORM subquery's

  2. Hoe json-array naar tekstarray te casten?

  3. Hoe vergrendelde rijen in Oracle te vinden

  4. Exporteer SQLite-database naar een CSV-bestand