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

Come modificare le regole di confronto di tutte le righe da latin1_swedish_ci a utf8_unicode_ci?

Se le colonne utilizzano il set di caratteri tabella predefinito, è solo una query per tabella da convertire:

ALTER TABLE t CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;

Se il set di caratteri è impostato individualmente su ciascuna colonna, AFAIK non c'è modo di farlo su tutte le colonne di tutte le tabelle nel database direttamente in MySql, ma potresti scrivere un piccolo programma nella tua lingua preferita che lo fa.

Il tuo programma interrogherà INFORMATION_SCHEMA.COLUMNS tabella e guarda il CHARACTER_SET_NAME colonna:

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

Per ogni riga di risultato è banale sintetizzare ed eseguire un ALTER TABLE query sul posto che modifichi il set di caratteri e le regole di confronto in modo appropriato:

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

Nella query precedente t , col e TEXT sarebbero i valori di TABLE_NAME , COLUMN_NAME e DATA_TYPE colonne da INFORMATION_SCHEMA.COLUMNS set di risultati.