Cómo configurar el juego de caracteres global en MySQL

12

Traté de cambiar el juego de caracteres para nuestro MySQL a través de my.cnf y falló. Agregué la configuración del juego de caracteres que se detalla a continuación:

# The MySQL server
[mysqld]
port            = 3306
socket          = /var/lib/mysql/mysql.sock
skip-locking
key_buffer = 16M
max_allowed_packet = 1M
table_cache = 64
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M

# ------------- MYSQL CHARSETS --------------
character_set_system = utf8
character_set_server = utf8
character_set_results = utf8
character_set_database = utf8
character_set_connection = utf8
character_set_client = utf8

collation_connection = utf8_general_ci
collation_database = utf8_general_ci
collation_server = utf8_general_ci

Cuando los habilité, MySQL no pudo iniciarse. ¿Cómo puedo asegurarme de que todo esté predeterminado en utf8 siempre?

Actualizar

Todavía hay algunos lugares que tienen problemas para ser UTF8

character_set_client    utf8
character_set_connection    utf8
character_set_database  latin1
character_set_filesystem    binary
character_set_results   utf8
character_set_server    latin1
character_set_system    utf8
character_sets_dir  /usr/share/mysql/charsets/
collation_connection    utf8_general_ci
collation_database  latin1_swedish_ci
collation_server    latin1_swedish_ci

Lamentablemente, todavía no se me ocurrió una solución ... ¿alguna idea?

Actualmente estoy usando esta configuración con éxito:

[mysqld]
default-character-set = utf8
init-connect='SET NAMES utf8'
character-set-server = utf8


[mysql]
default-character-set = utf8

Pero PHPMyAdmin todavía muestra algo de latin1

character_set_client    utf8
character_set_connection    utf8
character_set_database  latin1
character_set_filesystem    binary
character_set_results   utf8
character_set_server    latin1
character_set_system    utf8
character_sets_dir  /usr/share/mysql/charsets/
collation_connection    utf8_general_ci
collation_database  latin1_swedish_ci
collation_server    latin1_swedish_ci
Webnet
fuente

Respuestas:

23

Debe incorporar lo siguiente en su archivo my.cnf

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8


[mysqld]
default-character-set = utf8    
collation-server = utf8_general_ci
init-connect='SET NAMES utf8'
character-set-server = utf8

Puede encontrar más información en las siguientes páginas del manual.

En respuesta a la respuesta de Mark, si necesita convertir las tablas / bases de datos existentes al juego de caracteres correcto, necesitará una ALTERconsulta adecuada . Algo similar a lo siguiente:

ALTER TABLE `table` CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;

Alternativamente hay un gran guión PHP aquí , que lo hace por usted.

Ben Swinburne
fuente
He seguido tus instrucciones y revisado los enlaces de documentación ... todavía tengo algunos problemas (ver ^)
Cada vez que agrego collation-server = utf8_general_cia la mysqldsección mysql no se reinicia
¿Puedes ver lo que hay en el archivo de registro? Debería darte un mensaje de error de por qué falló. ¿Supongo que su mysqld fue compilado con el conjunto de caracteres generales utf8 incluido?
Sí, creo que fue ... ¿qué archivo de registro?
1
Funciona para mí (Debian 8, MySQL 5.5), excepto por la default-character-set = utf8línea en la [mysqld]sección. Agregar esta misma línea hace que mysqld tarde una eternidad en reiniciarse. El soporte Unicode, sin embargo, funciona muy bien incluso sin esta línea.
Bajo
2

La respuesta de Ben está bien, pero cambiar la configuración ABSOLUTAMENTE NO alterará los conjuntos de caracteres o las colaciones de las tablas existentes. Haga eso con una declaración ALTER TABLE apropiada.

Tenga en cuenta que si no lo especifica, las tablas se crean en el juego de caracteres predeterminado de la base de datos. Esta es una configuración por base de datos que se puede ajustar con ALTER DATABASE. Esto tampoco está configurado en my.cnf.


fuente
1
Sin embargo, las nuevas bases de datos heredarán la configuración predeterminada de mysql, ¿verdad?