Cómo hacer que MySQL maneje UTF-8 correctamente

Resuelto Ben asked hace 15 años • 15 respuestas

Una de las respuestas a una pregunta que hice ayer sugirió que debería asegurarme de que mi base de datos pueda manejar caracteres UTF-8 correctamente. ¿Cómo puedo hacer esto con MySQL?

Ben avatar Oct 15 '08 01:10 Ben
Aceptado

Actualizar:

Respuesta corta: casi siempre debería utilizar el utf8mb4juego de caracteres y utf8mb4_unicode_cila intercalación.

Para alterar la base de datos:

ALTER DATABASE dbname CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Ver:

  • Comentario de Aaron sobre esta respuesta Cómo hacer que MySQL maneje UTF-8 correctamente

  • ¿Cuál es la diferencia entre utf8_general_ci y utf8_unicode_ci?

  • Guía de conversión: https://dev.mysql.com/doc/refman/5.5/en/charset-unicode-conversion.html

Respuesta original:

MySQL 4.1 y superiores tienen un juego de caracteres predeterminado de UTF-8. Puede verificar esto en su my.cnfarchivo, recuerde configurar tanto el cliente como el servidor ( default-character-sety character-set-server).

Si tiene datos existentes que desea convertir a UTF-8, descargue su base de datos e impórtela nuevamente como UTF-8 asegurándose de:

  • utilizar SET NAMES utf8antes de consultar/insertar en la base de datos
  • utilizar DEFAULT CHARSET=utf8al crear nuevas tablas
  • En este punto, su cliente y servidor MySQL deberían estar en UTF-8 (consulte my.cnf). Recuerde que cualquier lenguaje que utilice (como PHP) también debe ser UTF-8. Algunas versiones de PHP utilizarán su propia biblioteca cliente MySQL, que puede no ser compatible con UTF-8.

Si desea migrar datos existentes, recuerde hacer una copia de seguridad primero. ¡Pueden ocurrir muchas modificaciones extrañas de datos cuando las cosas no salen según lo planeado!

Algunos recursos:

  • completar la migración UTF-8 (cdbaby.com)
  • artículo sobre la preparación para UTF-8 de las funciones php (tenga en cuenta que parte de esta información está desactualizada)
Owen avatar Oct 14 '2008 18:10 Owen

Para hacer esto "permanente", en my.cnf:

[client]
default-character-set=utf8
[mysqld]
character-set-server = utf8

Para comprobarlo, vaya al cliente y muestre algunas variables:

SHOW VARIABLES LIKE 'character_set%';

Verifique que sean todos utf8, excepto ..._filesystem, que debería ser binaryy ..._dir, que apuntan a algún lugar de la instalación de MySQL.

Javier avatar Oct 14 '2008 18:10 Javier

MySQL 4.1 y superiores tienen un juego de caracteres predeterminado al que llama utf8, pero que en realidad es sólo un subconjunto de UTF-8 (permite sólo caracteres de tres bytes o menos).

Úselo utf8mb4como juego de caracteres si desea UTF-8 "completo".

T.W.R. Cole avatar Apr 28 '2015 20:04 T.W.R. Cole