Pregunta

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

¿Fue útil?

Solución

Actualizar:

Respuesta corta: casi siempre deberías utilizar el utf8mb4 juego de caracteres y utf8mb4_unicode_ci colación.

Para alterar la base de datos:

ALTER DATABASE dbname CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Ver:

Respuesta original:

MySQL 4.1 y superiores tienen un juego de caracteres predeterminado de UTF-8.Puedes verificar esto en tu my.cnf archivo, recuerde configurar ambos cliente y servidor (default-character-set y 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:

  • usar SET NAMES utf8 antes de consultar/insertar en la base de datos
  • usar DEFAULT CHARSET=utf8 al 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:

Otros consejos

Para que esto sea "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%';

Verifica que estén todos utf8, excepto ..._filesystem, que debería ser binary y ..._dir, que apunta a algún lugar de la instalación de MySQL.

MySQL 4.1 y superior tiene un juego de caracteres predeterminado al que llama utf8 pero que en realidad es solo un subconjunto de UTF-8 (solo permite caracteres de tres bytes y más pequeños).

Use utf8mb4 como su juego de caracteres si quiere " full " UTF-8.

La respuesta corta: use utf8mb4 en 4 lugares:

  • Los bytes en su cliente son utf8, no latin1 / cp1251 / etc.
  • SET NAMES utf8mb4 o algo equivalente al establecer la conexión del cliente a MySQL
  • CHARACTER SET utf8mb4 en todas las tablas / columnas, excepto las columnas que son estrictamente ascii / hex / country_code / zip_code / etc.
  • <meta charset charset=UTF-8> si está enviando a HTML. (Sí, la ortografía es diferente aquí.)

Más información ;
UTF8 todo el camino

Los enlaces anteriores proporcionan la " se requiere una respuesta canónica detallada para abordar todas las inquietudes " ;. - Hay un límite de espacio en este foro.

Editar

Además de COLLATION utf8mb4_unicode_520_ci que contiene " all " Para los personajes del mundo, <=> es discutible la mejor clasificación para usar. (También hay colaciones turcas, españolas, etc. para aquellos que quieren los matices en esos idiomas).

El juego de caracteres es una propiedad de la base de datos (predeterminado) y la tabla. Puedes echar un vistazo (comandos MySQL):

show create database foo; 
> CREATE DATABASE  `foo`.`foo` /*!40100 DEFAULT CHARACTER SET latin1 */

show create table foo.bar;
> lots of stuff ending with
> ) ENGINE=InnoDB AUTO_INCREMENT=252 DEFAULT CHARSET=latin1

En otras palabras; es bastante fácil verificar el conjunto de caracteres de la base de datos o cambiarlo:

ALTER TABLE `foo`.`bar` CHARACTER SET utf8;

Para cambiar la codificación del juego de caracteres a UTF-8 para la base de datos en sí, escriba el siguiente comando en mysql > rápido. USE ALTER DATABASE .. Reemplace DBNAME con el nombre de la base de datos:

ALTER DATABASE DBNAME CHARACTER SET utf8 COLLATE utf8_general_ci;

Este es un duplicado de esta pregunta ¿Cómo convertir un conjunto completo de caracteres y colación de la base de datos MySQL a UTF-8?

Seguí la solución de Javier, pero agregué algunas líneas diferentes en my.cnf:

[myslqd]
skip-character-set-client-handshake
collation_server=utf8_unicode_ci
character_set_server=utf8 

Encontré esta idea aquí: http: // dev. mysql.com/doc/refman/5.0/en/charset-server.html en el primer / único comentario de usuario en la parte inferior de la página. Menciona que skip-character-set-client-handshake tiene alguna importancia.

Estos consejos sobre MySQL y UTF-8 pueden ser útiles . Desafortunadamente, no constituyen una solución completa, solo problemas comunes.

Establezca su database collation en UTF-8 luego aplique table collation a la base de datos predeterminada.

Su respuesta es que puede configurar mediante la configuración de MySql.En Mi respuesta puede haber algo fuera de contexto, pero esto también es de ayuda para usted.
cómo configurar Character Set y Collation.

Para aplicaciones que almacenan datos con el juego de caracteres predeterminado de MySQL y la intercalación (latin1, latin1_swedish_ci), sin configuración especial debería ser necesario.Si las aplicaciones requieren almacenamiento de datos mediante un diferente juego de caracteres o intercalación, puede configurar el juego de caracteres información de varias maneras:

  • Especifique la configuración de caracteres por base de datos. Por ejemplo, las aplicaciones que usan una base de datos pueden requerir utf8, mientras que las aplicaciones que usan otra base de datos pueden requerir SJIS.
  • Especifique la configuración de caracteres al iniciar el servidor. Esto hace que el servidor use la configuración dada para todas las aplicaciones que no hacen otros arreglos.
  • Especificar la configuración de caracteres en el momento de la configuración, si construyes mysql desde la fuente.Esto hace que el servidor utilice la configuración dada para todos los aplicaciones, sin tener que especificarlas al iniciar el servidor.

Los ejemplos que se muestran aquí para su pregunta para configurar el conjunto de caracteres utf8, aquí también configuran la intercalación para que sea más útil (utf8_general_ci cotejo`).

Especificar la configuración de caracteres por base de datos

  CREATE DATABASE new_db
  DEFAULT CHARACTER SET utf8
  DEFAULT COLLATE utf8_general_ci;

Especificar la configuración de caracteres al iniciar el servidor

[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci

Especificar la configuración de caracteres en el momento de la configuración de MySQL

shell> cmake . -DDEFAULT_CHARSET=utf8 \
           -DDEFAULT_COLLATION=utf8_general_ci

Para ver los valores del juego de caracteres y las variables del sistema de intercalación que se aplican a su conexión, utilice estas declaraciones:

SHOW VARIABLES LIKE 'character_set%';
SHOW VARIABLES LIKE 'collation%';

Esta puede ser una respuesta larga, pero hay todas las formas que puedes usar.Espero que mi respuesta sea útil para ti.para más información http://dev.mysql.com/doc/refman/5.7/en/charset-applications.html

SET NAMES UTF8

Este es el truco

CONEXIÓN DE BASE DE DATOS A UTF-8

$connect = mysql_connect('$localhost','$username','$password') or die(mysql_error());
mysql_set_charset('utf8',$connect);
mysql_select_db('$database_name','$connect') or die(mysql_error());

Establezca su conexión de base de datos a UTF8:

  if($handle = @mysql_connect(DB_HOST, DB_USER, DB_PASS)){          
         //set to utf8 encoding
         mysql_set_charset('utf8',$handle);
  }

Pude encontrar una solución. Ejecutó lo siguiente como se especifica en http://technoguider.com/2015/ 05 / utf8-set-up-in-mysql /

SET NAMES UTF8;
set collation_server = utf8_general_ci;
set default-character-set = utf8;
set init_connect = ’SET NAMES utf8′;
set character_set_server = utf8;
set character_set_client = utf8;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top