2011-01-24 9 views
10

Ho impostato le regole di confronto di tutte le mie tabelle di database come latin1_swedish_ci e ora mi rendo conto che dovrei usare utf8_bin o utf8_general_ci.Come modificare le regole di confronto su utf8_bin in una volta

Come posso modificare le regole di confronto nelle tabelle su utf8_bin o utf8_general_ci in una volta? Posso usare una query o qualcosa del genere?

risposta

28

avrete semplicemente bisogno di eseguire un ALTER per ciascuna delle tabelle come segue:

ALTER TABLE <table name> COLLATE utf8_general_ci; 

Se hai bisogno anche per aggiornare la codifica dei caratteri esistente (improbabile dal suono delle cose), è possibile utilizzare:

ALTER TABLE <table name> CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci; 
0

È possibile modificare le regole di confronto di un tavolo con ALTER TABLE:

alter table table_name collate=utf8_general_ci; 
+0

@ user576875: ti ringrazia. – laukok

10

È inoltre possibile aggiornare le regole di confronto del database con:

ALTER DATABASE `DATABASE_NAME` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci 
+0

Sembra che questo abbia impostato la fascicolazione su tutte le tabelle nello schema. Grazie. – cbeaudin

+0

Questo è uno. La base dati può avere molte tabelle – sivi

0

Qui ci sono due modi. Il primo ha funzionato per me. Dal terminal (Basta ricordarsi di backup prima.)

mysql --database=dbname -B -N -e "SHOW TABLES" | awk '{print "ALTER TABLE", $1, "CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;"}' | mysql --database=dbname & 

Fonte: Commandlineinfu.com

Da MySQL si dovrà utilizzare il comando Concat

SELECT CONCAT('ALTER TABLE `', tbl.`TABLE_SCHEMA`, '`.`', tbl.`TABLE_NAME`, '` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;') FROM `information_schema`.`TABLES` tbl WHERE tbl.`TABLE_SCHEMA` = 'dbname' 
Problemi correlati