2011-01-24 18 views
10

He configurado la intercalación de todas mis tablas de base de datos como latin1_swedish_ci y ahora me doy cuenta de que debo usar utf8_bin o utf8_general_ci.Cómo cambiar la intercalación a utf8_bin de una vez

¿Cómo puedo cambiar la clasificación en las tablas a utf8_bin o utf8_general_ci de una vez? ¿Puedo usar una consulta o algo?

Respuesta

28

Usted sólo tendrá que ejecutar un ALTER en cada una de las tablas de la siguiente manera:

ALTER TABLE <table name> COLLATE utf8_general_ci; 

Si también necesita para actualizar la codificación de caracteres existente (poco probable por el sonido de las cosas), puede utilizar:

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

Puede cambiar la intercalación de una mesa con ALTER TABLE:

alter table table_name collate=utf8_general_ci; 
+0

@ user576875: Gracias. – laukok

10

También puede actualizar la recopilación de la base de datos con:

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

Al hacer esto, parece que se ha establecido el cotejo en todas las tablas del esquema. Gracias. – cbeaudin

+0

Esto es una oportunidad. La base de datos puede tener muchas tablas – sivi

0

Aquí hay dos formas. El primero funcionó para mí. Desde la terminal (Recuerde hacer copias de seguridad antes.)

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 & 

Fuente: Commandlineinfu.com

Desde MySQL que tendrá que utilizar el comando de concatenación

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' 
Cuestiones relacionadas