Imaginemos una aplicación con la base de datos de mysql. En ella editamos información por ejemplo, de usuarios.
Todo es bonito y precioso.
Hasta! que decides exportar información a csv, hacer un volcado de datos y exportarlo a otra base de datos… etc.
¿Por qué? ¡Se ven mal los acentos, ñññññ y muchos caracteres!
Si estás en este caso, es que tienes mezclados los charset. Familiarizate con COLLATION y CHARSET.
http://dev.mysql.com/doc/refman/5.0/es/charset-mysql.html
Es mejor que utilices por compatibilidad UTF8.
Mysql por defecto crea collation a ‘latin1_swedish_ci’. Para arreglar los datos deberás hacer lo siguiente:
Si lo haces desde consola:
- Modificar la tabla
ALTER TABLE `caracteristicas_subtipos`
COLLATE=’utf8_general_ci’;
- Exportar los datos por medio de inserts Hacer truncate de la tabla.
- Mediante volcado mysqldump -p –default-character-set=utf8 base_de_datos tabla_a_modificar > tabla_a_modificar.sql
- Volcar los datos.
- Mediante mysql -p base_de_datos < tabla_a_modificar.sql
Si lo haces desde una herramienta de mysql:
Cambia sólo la forma de obtener los datos. Exporta los datos a INSERTS. Haz un truncate de la tabla. Antes de volcar los inserts pon la sentencia:
set names utf8;
FAQ:
Se puede hacer aplicado a todo un esquema?: No, tendrás que hacerlo tabla por tabla. Si alguien lo ha conseguido que lo comente!! sería un gran descubrimiento!
Agradecimientos:
A @rcasas que me enseñó estas cosas tan chulas.
Prueba a hacer una query al catálogo de mysql y con eso genera dinámicamente los alter tables para todo el esquema…
Porque no utilizas COLLATE=utf8_spanish_ci
Hola! así cambia la tabla pero no los datos que ya tienes en la tabla. Por lo menos en mi caso! Muchas gracias 🙂
Mejor aun:
ALTER TABLE mytabla DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci ;
Los cotejamientos de los campos de texto siguen estando en el cotejamiento antiguo.
Para aplicarlo a un esquema de tablas de forma total:
SELECT CONCAT(‘ALTER TABLE `’, t.`TABLE_SCHEMA`, ‘`.`’, t.`TABLE_NAME`, ‘` CONVERT TO CHARACTER SET utf8 COLLATE utf8_spanish_ci;’) as stmt
FROM `information_schema`.`TABLES` t
WHERE 1
AND t.`TABLE_SCHEMA` = ‘database_name’
ORDER BY 1
Sólo hay que cambiar database_name por el nombre de nuestra base de datos.
Nos devuelve en stmt todas las sentencias ALTER TABLE necesarias para modificar todas las tablas, sólo faltaría ejecutarlas mediante consola y con phpmyadmin.
Un saludo, espero sea de ayuda.
tecnocodigo
Wow! Muchas gracias por compartir conocimiento. Me quito el sombrero. Es una muy buena solución.
¿Quieres que actualice el post con tu nombre y enlace a tu web?
Estoy empezando a aprender esto y necesito cambiarlo a utf8_general_ci, este fue el error que me marca PHPMYADMIN consulta SQL: Documentación
SELECT CONCAT(‘ALTER TABLE `’, t.`TABLE_SCHEMA`, ‘`.`’, t.`TABLE_NAME`, ‘` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;’) as stmt
FROM `information_schema`.`TABLES` t
WHERE 1
AND t.`TABLE_SCHEMA` = ‘bitnami_wordpress’
ORDER BY 1
MySQL ha dicho: Documentación
#1064 – You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘TABLE `’, t.`TABLE_SCHEMA`, ‘`.`’, t.`TABLE_NAME`, ‘` CONVERT TO CHARACT’ at line 1
Algún consejo?
Soy nuevo en esto y necesito cambiarla a utf8_general_ci, pero al ejecutar la consulta me marca este error, espero me puedas responder que estoy algo estresado de intentar cambiar el cotejamiento, saludos 😀
consulta SQL: Documentación
SELECT CONCAT(‘ALTER TABLE `’, t.`TABLE_SCHEMA`, ‘`.`’, t.`TABLE_NAME`, ‘` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;’) as stmt
FROM `information_schema`.`TABLES` t
WHERE 1
AND t.`TABLE_SCHEMA` = ‘bitnami_wordpress’
ORDER BY 1
MySQL ha dicho: Documentación
#1064 – You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘TABLE `’, t.`TABLE_SCHEMA`, ‘`.`’, t.`TABLE_NAME`, ‘` CONVERT TO CHARACT’ at line 1
Hola Miguel! Desde donde estás lanzando la consulta? Prueba a lanzarlo desde otro entorno. Parece que está obteniendo la consulta en otro charset y la está codificando mal. Por ejemplo desde Heidi.
ME PASA LO MISMO. Copio lo que ha dicho @tecnocodigo y me sale el siguiente error de sintaxis.
#1064 – You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘TABLE `’, t.`TABLE_SCHEMA`, ‘`.`’, t.`TABLE_NAME`, ‘` CONVERT TO CHARACT’ at line 1
es por las comillas:
SELECT CONCAT(«ALTER TABLE `», t.`TABLE_SCHEMA`, «`.`», t.`TABLE_NAME`, «` CONVERT TO CHARACTER SET utf8 COLLATE utf8_spanish_ci;») as stmt
FROM `information_schema`.`TABLES` t
WHERE 1
AND t.`TABLE_SCHEMA` = «database_name»
ORDER BY 1
Hola y gracias por la ayuda !
Sabría alguien indicar cuál es el error ?
———————————————————————————————————-
Error
consulta SQL: Documentación
SELECT CONCAT( “ALTER
TABLE `”, t.` TABLE_SCHEMA `, “`.`”, t.` TABLE_NAME `, “`
CONVERT TO CHARACTER SET utf8 COLLATE utf8_spanish_ci;
MySQL ha dicho: Documentación
#1064 –
———————————————————————————————————-
Saludos cordiales !
Hola! El error «#1064 – You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘)’ at line 6 «. Debe ser alguna comilla o paréntesis. Prueba primero a hacer un alter table de una tabla y luego ve a más con select Concat! Si puedes nos dices el resultado 🙂 . Un saludo!! y gracias por compartir!!
SELECT CONCAT( ‘ALTER TABLE ‘, t.TABLE_SCHEMA, ‘.’, t.TABLE_NAME, ‘ CONVERT TO CHARACTER SET utf8 COLLATE utf8_spanish_ci;’ ) AS stmt
FROM information_schema.TABLES t
WHERE 1
AND t.TABLE_SCHEMA = ‘database’
ORDER BY 1
LIMIT 0 , 30
estoy intentando hacer una modificacion en la base de datos con respecto al cotejamiento y me aparecen los mismo errores de todos pero yo quisiera cambiar el cotejamiento de una sola fila pero no me funciona con ninguno que han publicado, y me aparece el error #1064
Alguien que me pueda ayudar . Gracias
Gracias, me funcionó de esta forma:
SELECT CONCAT( «ALTER
TABLE `», t.`TABLE_SCHEMA`, «`.`», t.`TABLE_NAME`, «`
CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci; ‘») as stmt
FROM information_schema.TABLES t
WHERE 1
AND t.TABLE_SCHEMA = ‘databasename’
ORDER BY 1
muchas gracias!!! lo probaré y si modifico te nombraré. Gracias
Quisiera aportar una solución sumada a la que se ha comentado. En mí caso necesitaba que los datos ya existentes se modificaran y con lo anterior no ocurría, le adicioné un UPDATE y con eso solucioné el problema.
https://git.uclv.edu.cu/miriel/update_chatset_database
Hola Laura, gracias por compartir tanta info. Quería comentar que encontré la manera de cambiar el cotejamiento y la colación de las tablas MYSQL, todas a la vez. Me resistí a hacerlo una por una a 400 tablas de Moodle jaja. Lo explican en este blog https://www.vivablogger.com/convertir-utf8-a-utf8mb4/#Formato_de_tablas_en_MySQL, bajo el título: Convirtiendo el juego de caracteres y cotejamiento de Utf8 a Utf8mb4. Ojalá sirva! Saludos desde Argentina.