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;
Echa un vistazo a Usar el comando Modificar para cambiar el conjunto de caracteres .
Otro enlace útil: http://dev.mysql.com/doc/refman/5.0/en/charset-table.html
La forma general es
ALTER DATABASE db_name
[[DEFAULT] CHARACTER SET charset_name]
[[DEFAULT] COLLATE collation_name]
y para una columna específica en una tabla
ALTER TABLE column COLLATE utf8_general_ci
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;