¿Cambiar el juego de caracteres predeterminado de MySQL a UTF-8 en my.cnf?

334

Actualmente estamos utilizando los siguientes comandos en PHP para establecer el conjunto de caracteres en UTF-8 en nuestra aplicación.

Dado que esto es un poco de sobrecarga, nos gustaría establecer esto como la configuración predeterminada en MySQL. ¿Podemos hacer esto en /etc/my.cnf o en otra ubicación?

SET NAMES 'utf8'
SET CHARACTER SET utf8

He buscado un juego de caracteres predeterminado en /etc/my.cnf, pero no hay nada sobre los juegos de caracteres.

En este punto, hice lo siguiente para configurar el juego de caracteres MySQL y las variables de colación en UTF-8:

skip-character-set-client-handshake
character_set_client=utf8
character_set_server=utf8

¿Es esa una forma correcta de manejar esto?

Jorre
fuente
19
Tenga en cuenta que sería un valor predeterminado mejor utf8mb4, es decir, UTF-8 real con soporte completo de Unicode. Ver Cómo ayuda completa de Unicode en bases de datos MySQL .
Mathias Bynens
@Jorre, ¿se opondría a cambiar esto para que utf8mb4sea ​​un buen precedente peligroso?
Evan Carroll

Respuestas:

424

Para establecer el valor predeterminado en UTF-8, desea agregar lo siguiente a my.cnf

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8


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

Si desea cambiar el conjunto de caracteres para una base de datos existente, hágamelo saber ... su pregunta no lo especificó directamente, por lo que no estoy seguro de si eso es lo que desea hacer.

NinjaCat
fuente
18
La configuración anterior de my.cnf también funcionó para mí. Además, tenía que asegurarme de que la tabla estaba configurada correctamente, como ALTER TABLE TableCONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
Chris Livdahl
8
No funciona para mysql 5.5. Usé: <br/> [mysqld] # Cambios para utf-8 collation-server = utf8mb4_unicode_ci init-connect = 'SET NAMES utf8mb4' character-set-server = utf8mb4 y utf8mb4 en otros lugares como se mencionó anteriormente.
Campeón el
12
En Ubuntu 12.04, esto funcionó para mí, si eliminé la primera línea después [mysqld].
Brandon Bertelsen
44
Parece que el conjunto de caracteres predeterminado ya no está permitido en la sección [mysqld]
marsbard
44
Tenga en cuenta que si UTF-8 es lo que desea, no use el utf8juego de caracteres MySQL . Usar en su utf8mb4lugar.
Mathias Bynens
255

Para la versión reciente de MySQL,

default-character-set = utf8

causa un problema Está en desuso, creo.

Como dice Justin Ball en " Actualizar a MySQL 5.5.12 y ahora MySQL no se iniciará , debe:

  1. Elimina esa directiva y deberías ser bueno.

  2. Entonces su archivo de configuración ('/etc/my.cnf' por ejemplo) debería verse así:

    [mysqld]
    collation-server = utf8_unicode_ci
    init-connect='SET NAMES utf8'
    character-set-server = utf8
  3. Reinicie MySQL.

  4. Para asegurarse, su MySQL es UTF-8, ejecute las siguientes consultas en su indicador de MySQL:

    • Primera consulta:

       mysql> show variables like 'char%';

      La salida debería verse así:

       +--------------------------+---------------------------------+
       | Variable_name            | Value                           |
       +--------------------------+---------------------------------+
       | character_set_client     | utf8                            |
       | character_set_connection | utf8                            |
       | character_set_database   | utf8                            |
       | character_set_filesystem | binary                          |
       | character_set_results    | utf8                            |
       | character_set_server     | utf8                            |
       | character_set_system     | utf8                            |
       | character_sets_dir       | /usr/local/mysql/share/charsets/|
       +--------------------------+---------------------------------+
    • Segunda consulta:

       mysql> show variables like 'collation%';

      Y el resultado de la consulta es:

       +----------------------+-----------------+
       | Variable_name        | Value           |
       +----------------------+-----------------+
       | collation_connection | utf8_general_ci |
       | collation_database   | utf8_unicode_ci |
       | collation_server     | utf8_unicode_ci |
       +----------------------+-----------------+
Mustafah
fuente
¿Su primera línea max_allowed_packet = 64M está relacionada con este problema UTF8 de alguna manera?
malhal
Tengo character_set_filesystem | utf8. No estoy seguro, ¿está bien?
tío Lem
1
Probé en MariaDB v5.5 y funciona, ¡gracias! mysql Ver 15.1 Distrib 5.5.35-MariaDB, for debian-linux-gnu (x86_64) using readline 5.1
cenk
Creo que no necesita eliminar default-character-set, en su lugar, puede cambiar a loose-default-character-set = utf8, es decir, prefijo con 'flojo'. Esto lo hace mysqlbinlogfeliz, si necesita usarlo - google for: "loose-default-character-set" mysqlbinlog .
KajMagnus
¿Es init-connect='SET NAMES utf8'realmente necesario? Si no, definitivamente podemos prescindir de él para el rendimiento.
datasn.io
56

Esta pregunta ya tiene muchas respuestas, pero Mathias Bynens mencionó que 'utf8mb4' debería usarse en lugar de 'utf8' para tener un mejor soporte UTF-8 ('utf8' no admite caracteres de 4 bytes, los campos se truncan al insertarlos ) Considero que esta es una diferencia importante. Así que aquí hay otra respuesta sobre cómo establecer el conjunto de caracteres y la clasificación predeterminados. Uno que le permitirá insertar un montón de caca (💩).

Esto funciona en MySQL 5.5.35.

Tenga en cuenta que algunas de las configuraciones pueden ser opcionales. Como no estoy completamente seguro de no haber olvidado nada, haré que esta respuesta sea un wiki de la comunidad.

Configuraciones antiguas

mysql> SHOW VARIABLES LIKE 'char%'; SHOW VARIABLES LIKE 'collation%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| 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/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

+----------------------+-------------------+
| Variable_name        | Value             |
+----------------------+-------------------+
| collation_connection | utf8_general_ci   |
| collation_database   | latin1_swedish_ci |
| collation_server     | latin1_swedish_ci |
+----------------------+-------------------+
3 rows in set (0.00 sec)

Config

# 💩 𝌆
# UTF-8 should be used instead of Latin1. Obviously.
# NOTE "utf8" in MySQL is NOT full UTF-8: http://mathiasbynens.be/notes/mysql-utf8mb4

[client]
default-character-set = utf8mb4

[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

[mysql]
default-character-set = utf8mb4

Nueva configuración

mysql> SHOW VARIABLES LIKE 'char%'; SHOW VARIABLES LIKE 'collation%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8mb4                    |
| character_set_connection | utf8mb4                    |
| character_set_database   | utf8mb4                    |
| character_set_filesystem | binary                     |
| character_set_results    | utf8mb4                    |
| character_set_server     | utf8mb4                    |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

+----------------------+--------------------+
| Variable_name        | Value              |
+----------------------+--------------------+
| collation_connection | utf8mb4_general_ci |
| collation_database   | utf8mb4_unicode_ci |
| collation_server     | utf8mb4_unicode_ci |
+----------------------+--------------------+
3 rows in set (0.00 sec)

character_set_system siempre es utf8 .

Esto no afectará las tablas existentes, es solo la configuración predeterminada (utilizada para tablas nuevas). El siguiente código ALTER puede usarse para convertir una tabla existente (sin la solución alternativa de volcado-restauración):

ALTER DATABASE databasename CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE tablename CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Editar:

En un servidor MySQL 5.0: character_set_client, character_set_connection, character_set_results, collation_connection permanecen en latin1. Emitir SET NAMES utf8(utf8mb4 no está disponible en esa versión) también los establece en utf8.


Advertencia : si tenía una tabla utf8 con una columna de índice de tipo VARCHAR (255), en algunos casos no se puede convertir porque se excede la longitud máxima de la clave ( Specified key was too long; max key length is 767 bytes.). Si es posible, reduzca el tamaño de la columna de 255 a 191 (porque 191 * 4 = 764 <767 <192 * 4 = 768). Después de eso, la tabla se puede convertir.

basic6
fuente
Seguí su configuración, pero encuentro que character_set_databaseestá quieto utf8y collation_databasees utf8_bin`. ¿Me he perdido algo?
Stewart
Encontré lo que me perdí. Esas 2 configuraciones se establecen cuando se crea la base de datos. Ver esta pregunta; stackoverflow.com/questions/22572558/…
Stewart
1
agregue character-set-client-handshake = FALSEa la sección [mysqld], por lo que siempre usará la codificación predeterminada, incluso si comete un error en la capa de aplicación
Lukas Liesis
hola, he probado esta solución pero aún no puedo mostrar character_set_client | utf8mb4. es utf8. solo character_set_database utf8mb4 y character_set_server utf8mb4 son utf8mb4 otros no han cambiado. Por favor, ayúdame
Bhavin Chauhan
@ baic6 Sugiero agregar una nota que aclare por qué solo las columnas indexadas pueden causar el problema. La limitación de 767 bytes es solo para columnas indexadas, porque la limitación para las "claves". Para las columnas no indexadas en general, esto no se aplica. Si una columna tuviera un valor con una longitud máxima de bytes, digamos 255 caracteres y se usaron los 3 bytes máximos de utf8, todavía necesitaría solo 255 * 3 bytes, utf8mb4 en estos casos usará solo 3 bytes, ya que estos caracteres en utf8mb4 también solo necesita 3 bytes. Es decir, a menos que un carácter que no cabe en utf8 se haya almacenado en la columna, en cuyo caso la información ya está perdida.
sam
55

En MySQL 5.5 tengo en my.cnf

[mysqld] 
init_connect='SET collation_connection = utf8_unicode_ci' 
init_connect='SET NAMES utf8' 
character-set-server=utf8 
collation-server=utf8_unicode_ci 
skip-character-set-client-handshake

El resultado es

mysql> show variables like "%character%";show variables like "%collation%";

+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

+----------------------+-----------------+
| Variable_name        | Value           |
+----------------------+-----------------+
| collation_connection | utf8_unicode_ci |
| collation_database   | utf8_unicode_ci |
| collation_server     | utf8_unicode_ci |
+----------------------+-----------------+
3 rows in set (0.00 sec)
tomazzlender
fuente
2
¿Qué hace skip-character-set-client-handshakeexactamente y bajo qué circunstancias se requiere?
Simon East
3
@ Simon, cuando usaba show variables like "%collation%";, veía 'collation_connection' como utf8_general_ciy collation_database y collation_server como utf8_unicode_ci. Agregar la línea skip-character-set-client-handshakecambió la entrada general a Unicode, por lo que los tres fueron consistentes.
Vaughany
2
En MySQL 5.6, skip-character-set-client-handshake no hace lo que dijo @Vaughany. ¿Cualquier sugerencia?
Ababneh A
44
Lo skip-character-set-client-handshakehicieron por mí (junto con el "servidor de conjunto de caracteres" y "servidor de intercalación", por supuesto, en Debian 7). El init_connects no hizo una diferencia con o sin el skipy parece redundante. +1 y gracias.
Jeff
3
skip-character-set-client-handshake ignora la información del juego de caracteres enviada por el cliente. Es bueno forzar un juego de caracteres específico durante la comunicación, pero si el cliente espera algo más, podría generar problemas. Diría que es mejor especificar esto en el cliente (su aplicación).
0b10011
31

Nota: el archivo my.cnf se encuentra en/etc/mysql/

Después de agregar estas líneas:

[mysqld]
collation-server = utf8_unicode_ci
init-connect='SET NAMES utf8'
character-set-server = utf8
skip-character-set-client-handshake

[client]
default-character-set   = utf8

[mysql]
default-character-set   = utf8

No olvides reiniciar el servidor:

sudo service mysql restart
М.Б.
fuente
2
Nota: Esto cambia los valores predeterminados; sí no cambia la codificación de las columnas existentes.
Rick James
24

NijaCat estuvo cerca, pero especificó exageración:

Para establecer el valor predeterminado en UTF-8, desea agregar lo siguiente a my.cnf

[client]
default-character-set=utf8

[mysqld]
default-character-set = utf8

Luego, para verificar:

mysql> show variables like "%character%";show variables like "%collation%";

+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

+----------------------+-----------------+
| Variable_name        | Value           |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
| collation_database   | utf8_general_ci |
| collation_server     | utf8_general_ci |
+----------------------+-----------------+
3 rows in set (0.00 sec)
Derek
fuente
55
Buena respuesta. Tal vez una breve explicación sobre qué partes son excesivas ayudaría a las personas a decidir exactamente qué quieren en su configuración.
Mike Samuel
@Derek, ¿qué hace [mysql] default-character-set=utf8entonces?
Pacerier
1
El grupo de opciones [cliente] ya establece opciones para todos los clientes MySQL que leen el archivo my.cnf. El grupo [mysql] establece opciones para el binario del cliente "mysql", específicamente. Si desea establecer una opción mysql que no se aplique a otros clientes, usar este grupo es apropiado, pero establecer el mismo valor de opción en ambas ubicaciones es redundante. dev.mysql.com/doc/refman/5.6/en/option-files.html
Derek
@Mike Samuel, establecer el conjunto de caracteres predeterminado en utf8 ya implica el modo de intercalación predeterminado de utf8_general_ci. Por otro lado, "init-connect = 'SET NAMES utf8'" es una idea algo interesante, ya que intenta obligar a todos los clientes que se conectan al servidor a usar utf8, pero esto se aplica de manera inconsistente dependiendo de los privilegios de conexión de la conexión usuario y sospecho que algunos clientes de terceros que se conectan pueden confundirse cuando el servidor anula el juego de caracteres que solicitaron. dev.mysql.com/doc/refman/5.6/en/charset-applications.html
Derek
Para [mysqld]usar en character-set-serverlugar dedefault-character-set
Rick James
23

También descubrí que después de configurarlo default-character-set = utf8bajo el [mysqld]título, MySQL 5.5.x no comenzaría con Ubuntu 12.04 (Precise Pangolin).

amiroff
fuente
16
Ese es el error MySQL # 52047 . Debajo [mysqld], debes usar en character-set-serverlugar de default-character-set. (Extremadamente confuso, ¡estoy de acuerdo!)
Mathias Bynens
Si. En desuso en 5.0; eliminado en 5.5.
Rick James
22

MySQL v5.5.3 y superior:

Simplemente agregue tres líneas solo en la sección [mysqld]:

[mysqld]
character-set-server = utf8
collation-server = utf8_unicode_ci
skip-character-set-client-handshake

Nota: Incluir skip-character-set-client-handshakeaquí elimina la necesidad de incluir tanto init-connecten [mysqld]como default-character-seten las secciones [client]y [mysql].

mug896
fuente
1
Wow, hay tantas respuestas duplicadas a esta pregunta, y sin embargo, esta parece ser la más simple. También funciona para mí en v5.5.44.
Justin Watt
9

Bajo Xubuntu 12.04 simplemente agregué

[mysqld]
character_set_server = utf8

a /etc/mysql/my.cnf

Y el resultado es

mysql> show variables like "%character%";show variables like "%collation%";
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

+----------------------+-----------------+
| Variable_name        | Value           |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
| collation_database   | utf8_general_ci |
| collation_server     | utf8_general_ci |
+----------------------+-----------------+
3 rows in set (0.00 sec)

También eche un vistazo a http://dev.mysql.com/doc/refman/5.6/en/charset-server.html

Falko
fuente
También necesita [cliente] default-character-set = utf8 de lo contrario, cuando use mysql en la línea de comando, no usará utf8, lo que podría destruir cualquier copia de seguridad que canalice al archivo.
malhal
9

Todos los ajustes enumerados aquí son correctos, pero aquí están la solución más óptima y suficiente:

[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
character-set-server = utf8
collation-server = utf8_unicode_ci

[client]
default-character-set = utf8

Añadir estos a /etc/mysql/my.cnf.

Tenga en cuenta que elijo el tipo de clasificación utf8_unicode_ci debido al problema de rendimiento.

El resultado es:

mysql> SHOW VARIABLES LIKE 'character%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+

mysql> SHOW VARIABLES LIKE 'collation%';
+----------------------+-----------------+
| Variable_name        | Value           |
+----------------------+-----------------+
| collation_connection | utf8_unicode_ci |
| collation_database   | utf8_unicode_ci |
| collation_server     | utf8_unicode_ci |
+----------------------+-----------------+

¡Y esto es cuando te conectas como usuario no SUPER !

Por ejemplo, la diferencia entre la conexión como usuario SUPER y no SUPER (por supuesto, en caso de colación utf8_unicode_ci ):

usuario con SUPER priv .:

mysql> SHOW VARIABLES LIKE 'collation%';
+----------------------+-----------------+
| Variable_name        | Value           |
+----------------------+-----------------+
| collation_connection | utf8_general_ci | <---
| collation_database   | utf8_unicode_ci |
| collation_server     | utf8_unicode_ci |
+----------------------+-----------------+

usuario con privilegio no SUPER :

mysql> SHOW VARIABLES LIKE 'collation%';
+----------------------+-----------------+
| Variable_name        | Value           |
+----------------------+-----------------+
| collation_connection | utf8_unicode_ci |
| collation_database   | utf8_unicode_ci |
| collation_server     | utf8_unicode_ci |
+----------------------+-----------------+

Escribí un artículo completo (rus) explicando en detalle por qué debería usar una u otra opción. Se consideran todos los tipos de conjuntos de caracteres y colaciones : para servidor, para base de datos, para conexión, para tabla e incluso para columna.

Espero que esto y el artículo ayuden a aclarar momentos poco claros.

gahcep
fuente
3
Desearía poder leer su artículo vinculado, pero no puedo leer ruso y el traductor de Google no es tan útil para textos técnicos. Por lo que puedo decir, sería muy interesante. ¿Podría considerar publicar una versión en inglés?
Martijn Heemels
2
¿Podría explicar qué configuración no puede establecer la clasificación de conexión de usuario SUPER? (y hay una solución)
KCD
@gahcep, Usted dijo que usa utf8_unicode_cidebido a problemas de rendimiento, entonces, ¿por qué no usar utf8_binen su lugar?
Pacerier
Hola paceriar Buen punto. Ahora no estoy seguro de si mi elección fue correcta sobre el uso utf8_unicode_ci. Nunca pasé tiempo probando el rendimiento.
gahcep
4

Las versiones de MySQL y las distribuciones de Linux pueden ser importantes al hacer configuraciones.

Sin embargo, los cambios bajo [mysqld] se recomiendan sección.

Quiero dar una breve explicación de la respuesta de tomazzlender:

[mysqld] 
init_connect='SET collation_connection = utf8_unicode_ci' 
init_connect='SET NAMES utf8' 
character-set-server=utf8 
collation-server=utf8_unicode_ci 
skip-character-set-client-handshake

[mysqld]

Esto cambiará collation_connection a utf8_unicode_ci

init_connect='SET collation_connection = utf8_unicode_ci'

Utilizando SET NAMES:

init_connect='SET NAMES utf8'

SET NAMES influirá en tres caracteres, es decir:

character_set_client
character_set_results
character_set_connection

Esto establecerá character_set_database & character_set_server

character-set-server=utf8

Esto solo afectará a collation_database & collation_server

collation-server=utf8_unicode_ci

Lo siento, no estoy tan seguro de qué es esto. Sin embargo, no lo uso:

skip-character-set-client-handshake
Lihang Li
fuente
La documentación señala que character_set_serverno debe establecerse manualmente.
Brian
Entonces, ¿cuál es el enfoque de vanguardia? Podemos pasar explícitamente character setal establecer la conexión de la base de datos, sin embargo, parece un poco molesto.
Lihang Li
En realidad cometí un error. La documentación dice que character_set_database no debe establecerse dinámicamente. No menciona character_set_server. Sin embargo, no estoy seguro de que deba preocuparse por character_set_server, ya que creo que solo afecta el valor predeterminado para una base de datos recién creada.
Brian
Como mencioné anteriormente e hice el experimento nuevamente en este momento, character_set_serveren la [mysqld]sección afectará character_set_databasey character_set_server. Ahora creo que una buena práctica es señalar explícitamente lo character setque desea utilizar al crear una base de datos, una tabla y una conexión de base de datos. Honestamente hablando, la documentación de mysqlno es tan fácil de entender. ¿Sabes si hay una forma genérica de hacer todas las configuraciones character sety collationhacerlas en mysql?
Lihang Li
4

En Fedora 21

$ vi /etc/my.cnf

Añadir seguimiento:

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci 
skip-character-set-client-handshake

Guardar y Salir.

Final recuerde reiniciar el servicio mysqld con service mysqld restart.

Nguyễn Văn Tiến
fuente
1

MySQL 5.5, todo lo que necesitas es:

[mysqld]
character_set_client=utf8
character_set_server=utf8
collation_server=utf8_unicode_ci

collation_server es opcional.

mysql> show variables like 'char%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
Gajus
fuente
1

Si tiene problemas para confirmar la compatibilidad del juego de caracteres del cliente con MySQL Workbench, tenga en cuenta la siguiente nota:

Importante Todas las conexiones abiertas por MySQL Workbench configuran automáticamente el juego de caracteres del cliente en utf8. Cambiar manualmente el conjunto de caracteres del cliente, como usar SET NAMES ..., puede hacer que MySQL Workbench no muestre correctamente los caracteres. Para obtener información adicional sobre los conjuntos de caracteres del cliente, consulte Conjuntos de caracteres de conexión y colaciones.

Por lo tanto, no pude anular los juegos de caracteres de MySQL Workbench con los cambios de my.cnf. por ejemplo, 'establecer nombres utf8mb4'

paiego
fuente
1

Si su configuración para el cliente le confunde y conn se restablece después de reiniciar el servicio mysql. Pruebe estos pasos (que funcionaron para mí):

  1. vi /etc/my.cnf
  2. agregue el contenido soplar y :wq [client] character-sets-dir=/usr/local/mysql/share/mysql/charsets
  3. reinicie mysql e inicie sesión en mysql, use la base de datos, el comando de entrada status;, encontrará el conjunto de caracteres para 'cliente' y 'conn' está configurado como 'utf8'.

Consulte la referencia para más información.

John Wen
fuente
0

Puede hacerlo de la manera que lo hace, y si no funciona, debe reiniciar mysql.

郭浩伟
fuente
-1

Cambiar el carácter MySQL:

Cliente

default-character-set=utf8

mysqld

character_set_server=utf8

No deberíamos escribir default-character-set=utf8en mysqld, porque eso podría provocar un error como:

inicio: no se pudo iniciar el trabajo

Al final:

 +--------------------------+----------------------------+
 | Variable_name            | Value                      |
 +--------------------------+----------------------------+
 | character_set_client     | utf8                       |
 | character_set_connection | utf8                       |
 | character_set_database   | utf8                       |
 | character_set_filesystem | binary                     |
 | character_set_results    | utf8                       |
 | character_set_server     | utf8                       |
 | character_set_system     | utf8                       |
 | character_sets_dir       | /usr/share/mysql/charsets/ |
 +--------------------------+----------------------------+
MYLOGOS
fuente