sql >> Database teknologi >  >> RDS >> Mysql

Hvordan ændres sammenstilling af alle rækker fra latin1_swedish_ci til utf8_unicode_ci?

Hvis kolonnerne bruger standardtabeltegnsættet, er det kun én forespørgsel pr. tabel, der skal konverteres:

ALTER TABLE t CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;

Hvis tegnsættet er indstillet individuelt på hver kolonne, AFAIK, er der ingen måde at gøre det på alle kolonner i alle tabeller i databasen direkte i MySql, men du kan skrive et lillebitte program på dit valgfrit sprog, der gør det.

Dit program vil forespørge på INFORMATION_SCHEMA.COLUMNS tabel og se på CHARACTER_SET_NAME kolonne:

SELECT * FROM `INFORMATION_SCHEMA.COLUMNS`
WHERE TABLE_SCHEMA = 'dbname' AND CHARACTER_SET_NAME = 'latin1'

For hver resultatrække er det trivielt at syntetisere og udføre en ALTER TABLE forespørgsel på stedet, der ændrer tegnsættet og sorteringen korrekt:

ALTER TABLE t MODIFY col TEXT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

I ovenstående forespørgsel t , col og TEKST ville være værdierne for TABLE_NAME , COLUMN_NAME og DATA_TYPE kolonner fra INFORMATION_SCHEMA.COLUMNS resultatsæt.



  1. Hvordan kalder man Oracle Stored Procedure i Python?

  2. skifte fra MySQL til PostgreSQL for Ruby on Rails af hensyn til Heroku

  3. MySql vælger dynamiske rækkeværdier som kolonnenavne

  4. Sådan sletter du sidste post (på betingelse) fra en tabel i MySql