utf8 charset mysql utf-8

charset - Cómo hacer que MySQL maneje UTF-8 apropiadamente



utf8mb4 mysql (14)

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


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());


Configure 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); }


El juego de caracteres es una propiedad de la base de datos (por defecto) 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 juego de caracteres de la base de datos o cambiarlo:

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


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



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 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 "respuesta canónica detallada necesaria para abordar todas las inquietudes". - Hay un límite de espacio en este foro.

Editar

Además del CHARACTER SET utf8mb4 contiene "todos" los caracteres del mundo, COLLATION utf8mb4_unicode_520_ci es discutible como la mejor clasificación para usar. (También hay colaciones turcas, españolas, etc. para aquellos que desean los matices en esos idiomas).


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

Si tiene datos existentes que desea convertir a UTF-8, vacíe su base de datos y vuelva a importarla como UTF-8 asegurándose de que:

  • use SET NAMES utf8 antes de consultar / insertar en la base de datos
  • use DEFAULT CHARSET=utf8 al crear nuevas tablas
  • en este punto, su cliente y servidor MySQL debe estar en UTF-8 (vea my.cnf ). recuerde que cualquier idioma que use (como PHP) debe ser UTF-8 también. Algunas versiones de PHP usarán su propia biblioteca de cliente MySQL, que puede no ser compatible con UTF-8.

Si desea migrar datos existentes, recuerde hacer una copia de seguridad primero. ¡Se pueden producir muchos cortes de datos extraños cuando las cosas no salen según lo planeado!

Algunos recursos:


MySQL 4.1 y superior tiene un juego de caracteres predeterminado 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 utf8mb4 caracteres si quiere UTF-8 "completo".



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

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

Para verificar, ve al cliente y muestra algunas variables:

SHOW VARIABLES LIKE ''character_set%'';

Verifique que todos sean utf8 , excepto ..._filesystem , que debe ser binary y ..._dir , que apunta a alguna parte de la instalación de MySQL.


Pude encontrar una solución. Ejecuta 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;


Seguí la solución de Javier, pero agregué algunas líneas diferentes en mi.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 del usuario en la parte inferior de la página. Él menciona que skip-character-set-client-handshake tiene cierta importancia.


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

Para las aplicaciones que almacenan datos utilizando el conjunto de caracteres MySQL predeterminado y la intercalación ( latin1, latin1_swedish_ci ), no se necesita ninguna configuración especial. Si las aplicaciones requieren almacenamiento de datos utilizando un juego de caracteres o intercalación diferente, puede configurar la información del juego de caracteres 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 los caracteres al inicio del servidor. Esto hace que el servidor use la configuración dada para todas las aplicaciones que no hacen otros arreglos.
  • Especifique la configuración de caracteres en el momento de la configuración , si compila MySQL desde la fuente. Esto hace que el servidor use la configuración dada para todas las aplicaciones, sin tener que especificarlas al inicio del servidor.

Los ejemplos que se muestran aquí para su pregunta para establecer el conjunto de caracteres utf8, aquí también establecen la intercalación para obtener más ayuda ( utf8_general_ci colación`).

Especifique la configuración de caracteres por base de datos

CREATE DATABASE new_db DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;

Especifique la configuración de caracteres al inicio del servidor

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

Especifique la configuración de caracteres en el tiempo de configuración de MySQL

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

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

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

Esta puede ser una respuesta larga, pero de todos modos, puede usarla. 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