utf8 usando tabla está datos cotejamiento convertir configuración charset cambiar actual mysql database encoding utf-8

usando - tabla mysql utf8



¿Cómo cambio una tabla MySQL a UTF-8? (5)

Sé que hay muchas configuraciones para un idioma para una tabla y una base de datos.

Ya he creado la base de datos. Creo que cuando lo creé, era por defecto / LATIN. Quiero cambiar todo, quiero decir ... tanto la tabla como la base de datos, a UTF-8 .

¿Cómo puedo hacer eso? Gracias.


1) Conjunto de caracteres y colación por defecto de la base de datos:

SELECT @@character_set_database, @@collation_database;

Alterado vía: ALTER DATABASE CHARACTER SET utf8 COLLATE utf8_general_ci;

2) Conjunto de caracteres y colación predeterminados de la tabla:

SELECT T.table_name, CCSA.character_set_name FROM information_schema.TABLES T, information_schema.COLLATION_CHARACTER_SET_APPLICABILITY CCSA WHERE CCSA.collation_name = T.table_collation AND T.table_schema = "YOUR_DB";`

Alterado vía: ALTER TABLE [table_name] CHARACTER SET utf8 COLLATE utf8_general_ci

3) Conjunto de caracteres de columna y colación:

SELECT c.TABLE_NAME, c.COLUMN_NAME, c.CHARACTER_SET_NAME, c.COLLATION_NAME FROM information_schema.COLUMNS c WHERE c.table_schema = "YOUR_DB";`

Modificado a través de: ALTER TABLE [table_name] CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci

El tercero requiere que desactive las comprobaciones de clave externa para la conversión de datos. Así que juntando todo esto:

DELIMITER // CREATE PROCEDURE migrate_charset_to_utf8() BEGIN DECLARE done TINYINT DEFAULT 0; DECLARE curr_table VARCHAR(64); DECLARE table_cursor CURSOR FOR SELECT T.table_name FROM information_schema.TABLES T WHERE T.TABLE_TYPE = ''BASE TABLE'' AND T.TABLE_SCHEMA = ''YOUR_DB''; DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1; OPEN table_cursor; table_loop: LOOP FETCH table_cursor INTO curr_table; IF done THEN LEAVE table_loop; END IF; # Convert table data(columns) charset SET @sql_str1 = CONCAT("ALTER TABLE ", curr_table, " CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci"); PREPARE stmt1 FROM @sql_str1; EXECUTE stmt1; DEALLOCATE PREPARE stmt1; # Set table''s default charset e.g for new columns added SET @sql_str2 = CONCAT("ALTER TABLE ", curr_table, " CHARACTER SET utf8 COLLATE utf8_general_ci"); PREPARE stmt2 FROM @sql_str2; EXECUTE stmt2; DEALLOCATE PREPARE stmt2; END LOOP table_loop; CLOSE table_cursor; END// DELIMITER ; SET @@FOREIGN_KEY_CHECKS = 0; CALL migrate_charset_to_utf8(); SET @@FOREIGN_KEY_CHECKS = 1; ALTER DATABASE CHARACTER SET utf8 COLLATE utf8_general_ci;

EDITAR: mira here lugar


Agregue a su my.cnf esto:

[mysqld] character-set-server=utf8 default-collation=utf8_unicode_ci

Y reinicie mysqld deamon.

ADICIONAL:

ALTER DATABASE your_base_name CHARACTER SET utf8 COLLATE utf8_unicode_ci;

y my.cnf

SET collation_connection = utf8_unicode_ci; SET character_set_results = utf8; SET character_set_connection = utf8; SET character_set_client = utf8;



La respuesta de aioobe le dice cómo cambiar el conjunto de caracteres de una base de datos, tabla o columna. Debes tener en cuenta que

  • la configuración del conjunto de caracteres para una tabla solo especifica el conjunto de caracteres predeterminado para las nuevas columnas en esa tabla. No cambia el juego de caracteres para columnas preexistentes; tiene que hacer esas columnas individualmente, O si desea cambiar cada columna de tipo cadena en la tabla al mismo conjunto de caracteres, hay un comando que puede usar para hacer eso: "alterar tabla ... convertir en conjunto de caracteres" ( http://dev.mysql.com/doc/refman/5.1/en/alter-table.html )

  • Si ya tiene datos que están almacenados mal codificados en una columna, entonces usar "alterar tabla ... modificar" para cambiar la columna no resolverá el problema. Por ejemplo, si ha estado almacenando datos UTF-8 en una columna Latin1 y cambia el conjunto de caracteres directamente de Latin1 a UTF-8, aún se codificará incorrectamente después. Esto se puede solucionar convirtiendo de Latin-1 a UTF-8 a través de binario.


ALTER TABLE tbl_name CONVERT TO CHARACTER SET utf8;