Cómo modificar tablas a UTF8 MySQL

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:

  1. Modificar la tabla

ALTER TABLE `caracteristicas_subtipos`
COLLATE=’utf8_general_ci’;

  1. 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
  2. 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.

Anuncio publicitario

20 comentarios en “Cómo modificar tablas a UTF8 MySQL

  1. 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.

  2. 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

  3. 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

  4. 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

  5. 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

  6. 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

  7. 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.

Deja una respuesta

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.