sql >> Databasteknik >  >> RDS >> Mysql

Hur ändrar man sammanställning av alla rader från latin1_swedish_ci till utf8_unicode_ci?

Om kolumnerna använder standardtabellteckenuppsättningen är det bara en fråga per tabell att konvertera:

ALTER TABLE t CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;

Om teckenuppsättningen är individuellt inställd på varje kolumn, AFAIK finns det inget sätt att göra det på alla kolumner i alla tabeller i databasen direkt i MySql, men du kan skriva ett litet program på ditt valfria språk som gör det.

Ditt program skulle fråga efter INFORMATION_SCHEMA.COLUMNS tabellen och titta på CHARACTER_SET_NAME kolumn:

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

För varje resultatrad är det trivialt att syntetisera och köra en ALTER TABLE fråga på plats som ändrar teckenuppsättningen och sorteringen på lämpligt sätt:

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

I ovanstående fråga t , col och TEXT skulle vara värdena för TABLE_NAME , COLUMN_NAME och DATA_TYPE kolumner från INFORMATION_SCHEMA.COLUMNS resultatuppsättning.



  1. MySQL-strängbyte

  2. MySQL Allvarligt fel:Kan inte öppna och låsa behörighetstabeller:Felaktigt filformat "användare"

  3. Hur lägger man till datum och tidsstämpel till en INSERT via PHP med mySQL?

  4. Hur använder man tabellvariabel i en dynamisk SQL-sats?