Alterar o conjunto de caracteres padrão do MySQL para UTF-8 em my.cnf?


334

Atualmente, estamos usando os seguintes comandos no PHP para definir o conjunto de caracteres para UTF-8 em nosso aplicativo.

Como isso é um pouco trabalhoso, gostaríamos de definir isso como a configuração padrão no MySQL. Podemos fazer isso em /etc/my.cnf ou em outro local?

SET NAMES 'utf8'
SET CHARACTER SET utf8

Procurei um conjunto de caracteres padrão no /etc/my.cnf, mas não há nada sobre os conjuntos de caracteres.

Nesse ponto, fiz o seguinte para definir as variáveis ​​de conjunto de caracteres e agrupamento do MySQL como UTF-8:

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

Essa é a maneira correta de lidar com isso?


19
Observe que um padrão melhor seria utf8mb4, ou seja, UTF-8 real com suporte completo a Unicode. Veja Como suportar Unicode completo nos bancos de dados MySQL .
Mathias Bynens

@Jorre você se oporia a mudar isso para que utf8mb4isso seja um tipo de precedente perigoso?
Evan Carroll

Respostas:


424

Para definir o padrão como UTF-8, você deseja adicionar o seguinte ao 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

Se você deseja alterar o conjunto de caracteres de um banco de dados existente, informe-me ... sua pergunta não o especificou diretamente, portanto, não tenho certeza se é isso que você deseja fazer.


18
As configurações acima do my.cnf funcionaram para mim também. Além disso, eu precisava garantir que a tabela estivesse configurada corretamente, como ALTER TABLE TableCONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
Chris Livdahl

8
Não funciona para o mysql 5.5. Eu usei: <br/> [mysqld] # Alterações para utf-8 collation-server = utf8mb4_unicode_ci init-connect = 'SET NAMES utf8mb4' conjunto de caracteres servidor = utf8mb4 e utf8mb4 em outros lugares, conforme mencionado acima.
Champ

12
No Ubuntu 12.04, isso funcionou para mim - se eu removi a primeira linha depois [mysqld].
precisa

4
Parece default-character-set não é permitido no [mysqld]
marsbard

4
Note que se UTF-8 é o que você deseja, não use o conjunto de utf8caracteres do MySQL . Use em utf8mb4vez disso.
Mathias Bynens

255

Para a versão recente do MySQL,

default-character-set = utf8

causa um problema. É obsoleto, eu acho.

Como Justin Ball diz em " Atualize para o MySQL 5.5.12 e agora o MySQL não inicia , você deve:

  1. Remova essa diretiva e você deve ser bom.

  2. Então seu arquivo de configuração ('/etc/my.cnf', por exemplo) deve ficar assim:

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

  4. Para garantir que seu MySQL seja UTF-8, execute as seguintes consultas no prompt do MySQL:

    • Primeira consulta:

       mysql> show variables like 'char%';

      A saída deve se parecer com:

       +--------------------------+---------------------------------+
       | 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%';

      E a saída da consulta é:

       +----------------------+-----------------+
       | Variable_name        | Value           |
       +----------------------+-----------------+
       | collation_connection | utf8_general_ci |
       | collation_database   | utf8_unicode_ci |
       | collation_server     | utf8_unicode_ci |
       +----------------------+-----------------+

Sua primeira linha max_allowed_packet = 64M está relacionada a esse problema do UTF8 de alguma forma?
malhal

Eu tenho character_set_filesystem | utf8. Eu não tenho certeza, está tudo bem?
Tio Lem

11
Tentei no MariaDB v5.5 e funciona, obrigado! mysql Ver 15.1 Distrib 5.5.35-MariaDB, for debian-linux-gnu (x86_64) using readline 5.1
cenk

Eu acho que você não precisa removê- default-character-setlo. Em vez disso, pode mudar para loose-default-character-set = utf8- ou seja, prefixo com 'loose-'. Isso fica mysqlbinlogfeliz, se você precisar usá-lo - google for: mysqlbinlog "loose-default-character-set" .
KajMagnus

É init-connect='SET NAMES utf8'realmente necessário? Caso contrário, podemos definitivamente fazer isso sem desempenho.
Datasn.io

56

Essa pergunta já tem muitas respostas, mas Mathias Bynens mencionou que 'utf8mb4' deve ser usado em vez de 'utf8' para ter um melhor suporte UTF-8 ('utf8' não suporta caracteres de 4 bytes, os campos são truncados na inserção ) Considero isso uma diferença importante. Então, aqui está mais uma resposta sobre como definir o conjunto de caracteres padrão e agrupamento. Um que lhe permitirá inserir uma pilha de cocô (💩).

Isso funciona no MySQL 5.5.35.

Observe que algumas das configurações podem ser opcionais. Como não tenho certeza absoluta de que não esqueci nada, tornarei esta resposta um wiki da comunidade.

Configurações antigas

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

Novas configurações

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 é sempre utf8 .

Isso não afetará as tabelas existentes, é apenas a configuração padrão (usada para novas tabelas). O seguinte código ALTER pode ser usado para converter uma tabela existente (sem a solução alternativa de restauração de despejo):

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

Editar:

Em um servidor MySQL 5.0: character_set_client, character_set_connection, character_set_results, collation_connection permanecem em latin1. A emissão SET NAMES utf8(utf8mb4 não disponível nessa versão) também os define como utf8.


Advertência : Se você tinha uma tabela utf8 com uma coluna de índice do tipo VARCHAR (255), ela não pode ser convertida em alguns casos, porque o comprimento máximo da chave foi excedido ( Specified key was too long; max key length is 767 bytes.). Se possível, reduza o tamanho da coluna de 255 para 191 (porque 191 * 4 = 764 <767 <192 * 4 = 768). Depois disso, a tabela pode ser convertida.


Eu segui suas configurações, mas acho que character_set_databaseainda é utf8e collation_databaseé utf8_bin`. Perdi alguma coisa?
Stewart

Encontrei o que eu perdi. Essas 2 configurações são definidas quando o próprio banco de dados é criado. Veja esta pergunta; stackoverflow.com/questions/22572558/…
Stewart

11
adicionar character-set-client-handshake = FALSEa seção [mysqld], por isso sempre vai usar o padrão codificação, mesmo se você vai cometer erros na camada de aplicação
Lukas Liesis

oi eu tentei esta solução, mas ainda não consigo mostrar character_set_client | utf8mb4. é utf8. apenas character_set_database utf8mb4 e character_set_server utf8mb4 são utf8mb4 outros não alterados. Por favor me ajude
Bhavin Chauhan

@ baic6 Sugiro adicionar uma observação esclarecendo por que apenas colunas indexadas podem causar o problema. A limitação de 767 bytes é apenas para colunas indexadas, pois a limitação para "chave" s. Para colunas não indexadas em geral, isso não se aplica. Se uma coluna tivesse um valor com tamanho máximo de bytes, digamos 255 caracteres e os 3 bytes máximos de utf8 fossem usados, ainda seria necessário apenas 255 * 3 bytes, utf8mb4 nesses casos usará apenas 3 bytes, pois esses caracteres em utf8mb4 também precisa de apenas 3 bytes. Ou seja, a menos que um caractere que não se encaixe no utf8 tenha sido armazenado na coluna, nesse caso a informação já estará perdida.
sam

55

No MySQL 5.5 eu tenho no 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

O resultado é

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)

2
O que skip-character-set-client-handshakefaz exatamente e em que circunstâncias é necessário?
Simon East

3
@ Simon, ao usar show variables like "%collation%";eu estava vendo 'collation_connection' como utf8_general_cie collation_database e collation_server comoutf8_unicode_ci . A adição da linha skip-character-set-client-handshakealterou a entrada geral para unicode, para que todos os três fossem consistentes.
Vaughany

2
No MySQL 5.6, o skip-character-set-client-handshake não faz o que o @Vaughany disse. Alguma sugestão?
Ababneh Um

4
O skip-character-set-client-handshakefizeram por mim (junto com o "conjunto de caracteres-servidor" e "servidor de agrupamento", é claro - no Debian 7). Os init_connects não fizeram diferença com ou sem o skipe parecem redundantes. +1 e obrigado.
27413 Jeff Jeff

3
skip-character-set-client-handshake ignora as informações do conjunto de caracteres enviadas pelo cliente. É bom forçar um conjunto de caracteres específico durante a comunicação, mas se o cliente estiver esperando outra coisa, isso poderá causar problemas. Eu diria que é melhor especificar isso no cliente (seu aplicativo).
precisa saber é o seguinte

31

Nota: o arquivo my.cnf está localizado em/etc/mysql/

Depois de adicionar estas linhas:

[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

Não se esqueça de reiniciar o servidor:

sudo service mysql restart

2
Nota: Isso altera os padrões; ele não alterar a codificação para quaisquer colunas existentes.
19417 Rick James

24

O NijaCat estava próximo, mas o excesso especificado:

Para definir o padrão como UTF-8, você deseja adicionar o seguinte ao my.cnf

[client]
default-character-set=utf8

[mysqld]
default-character-set = utf8

Em seguida, 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)

5
Boa resposta. Talvez uma breve explicação sobre quais partes são exageradas ajudaria as pessoas a decidir exatamente o que elas querem em suas configurações.
Mike Samuel

@ Derek, o que faz [mysql] default-character-set=utf8então?
Pacerier 18/10

11
O grupo de opções [client] já define opções para todos os clientes MySQL que lêem o arquivo my.cnf. O grupo [mysql] define opções apenas para o binário do cliente "mysql", especificamente. Se você deseja definir uma opção mysql que não se aplica a outros clientes, usar este grupo é apropriado, mas definir o mesmo valor de opção em ambos os locais é redundante. dev.mysql.com/doc/refman/5.6/en/option-files.html
Derek

@ Mike Samuel, definir o conjunto de caracteres padrão como utf8 já implica o modo de agrupamento padrão de utf8_general_ci. Por outro lado, "init-connect = 'SET NAMES utf8'" é uma idéia um pouco interessante, pois tenta forçar todos os clientes que se conectam ao servidor a usar utf8, mas isso é aplicado de maneira inconsistente, dependendo dos privilégios de conexão da conexão usuário e suspeito que alguns clientes conectados de terceiros possam ficar confusos quando o servidor substituir o conjunto de caracteres solicitado. dev.mysql.com/doc/refman/5.6/en/charset-applications.html
Derek

Para [mysqld]uso em character-set-servervez dedefault-character-set
Rick James

23

Eu também descobri que depois de definir default-character-set = utf8sob [mysqld]título, MySQL 5.5.x não iria começar sob Ubuntu 12.04 (Pangolin preciso).


16
Esse é o bug do MySQL # 52047 . Abaixo [mysqld], você deve usar em character-set-servervez de default-character-set. (Extremamente confuso, eu concordo!)
Mathias Bynens

Sim. Descontinuado em 5.0; removido em 5.5.
Rick James

22

MySQL v5.5.3 e superior:

Apenas adicione três linhas apenas na seção [mysqld]:

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

Nota: Incluindo skip-character-set-client-handshakeaqui elimina a necessidade de incluir init-connectno [mysqld]e default-character-setnos [client]e [mysql]seções.


11
Uau, tantas respostas duplicadas para essa pergunta, e ainda assim essa parece ser a mais simples. Também funciona para mim na v5.5.44.
23715 Justin Watt

9

No Xubuntu 12.04, simplesmente adicionei

[mysqld]
character_set_server = utf8

para /etc/mysql/my.cnf

E o resultado é

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)

Veja também http://dev.mysql.com/doc/refman/5.6/en/charset-server.html


Você também precisa do [client] conjunto de caracteres padrão = utf8, caso contrário, quando você usar o mysql na linha de comando, ele não utilizará o utf8, potencialmente destruindo os backups que você enviar para o arquivo.
malhal

9

Todas as configurações listadas aqui estão corretas, mas aqui está a solução mais ideal e suficiente:

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

[client]
default-character-set = utf8

Adicione-os a /etc/mysql/my.cnf.

Observe que escolho o tipo de agrupamento utf8_unicode_ci devido ao problema de desempenho.

O resultado é:

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 |
+----------------------+-----------------+

E é aí que você se conecta como usuário não SUPER !

Por exemplo, a diferença entre a conexão como usuário SUPER e não-SUPER (é claro no caso de agrupamento utf8_unicode_ci ):

usuário com 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 |
+----------------------+-----------------+

usuário com priv não SUPER :

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

Eu escrevi um artigo abrangente (rus) explicando em detalhes por que você deve usar uma ou outra opção. Todos os tipos de conjuntos de caracteres e agrupamentos são considerados: para servidor, para banco de dados, para conexão, para tabela e até para coluna.

Espero que isso e o artigo ajudem a esclarecer momentos pouco claros.


3
Gostaria de poder ler seu artigo vinculado, mas não consigo ler russo e o Google tradutor não é tão útil para textos técnicos. Pelo que sei, seria muito interessante. Você poderia publicar uma versão em inglês?
Martijn Heemels 14/03/2013

2
Você poderia explicar qual configuração falha ao definir o agrupamento de conexão do usuário SUPER? (e existe uma solução)
KCD

@gahcep, você declarou que usa utf8_unicode_cidevido a problemas de desempenho; por que não usar utf8_bin?
Pacerier 18/10/2014

Olá Paceriar. Bom ponto. Agora não tenho certeza se minha escolha foi correta sobre o uso utf8_unicode_ci. Nunca gastei tempo testando o desempenho.
gahcep


4

Versões do MySQL e distribuições do Linux podem ser importantes ao fazer configurações.

No entanto, as alterações na [mysqld]seção são incentivadas.

Quero dar uma breve explicação da resposta 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]

Isso mudará collation_connection para utf8_unicode_ci

init_connect='SET collation_connection = utf8_unicode_ci'

Usando SET NAMES:

init_connect='SET NAMES utf8'

O SET NAMES influenciará três caracteres, ou seja:

character_set_client
character_set_results
character_set_connection

Isso definirá character_set_database & character_set_server

character-set-server=utf8

Isso afetará apenas collation_database & collation_server

collation-server=utf8_unicode_ci

Desculpe, não tenho tanta certeza do que é isso. Eu não o uso no entanto:

skip-character-set-client-handshake

A documentação observa que character_set_servernão deve ser definido manualmente.
27713 Brian

Então, qual é a abordagem de última geração? Podemos passar explicitamente character setao estabelecer conexão com o banco de dados, no entanto, parece um pouco irritante.
Lihang Li

Na verdade, cometi um erro. A documentação diz que character_set_database não deve ser definido dinamicamente. Não menciona character_set_server. No entanto, não tenho certeza se você precisa se preocupar com character_set_server, pois acho que isso afeta apenas o valor padrão de um banco de dados recém-criado.
Brian

Como eu mencionei acima e eu fiz o experimento novamente apenas agora, character_set_serverna [mysqld]seção afetará character_set_databasee character_set_server. Agora, acho que uma boa prática é apontar explicitamente o character setque você deseja usar ao criar um banco de dados, uma tabela e uma conexão com o banco de dados. Honestamente falando, a documentação de mysqlnão é tão fácil de entender. Você sabe se existe uma maneira genérica de obter todas as configurações character sete collationfeitas no mysql?
Lihang Li

4

No Fedora 21

$ vi /etc/my.cnf

Adicionar seguir:

[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

Salvar e sair.

Final lembre-se de reiniciar o serviço mysqld com service mysqld restart.


1

MySQL 5.5, tudo que você precisa é:

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

collation_server é 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)

1

Se você está tendo problemas para confirmar o suporte ao conjunto de caracteres do cliente usando o MySQL Workbench, lembre-se da seguinte nota:

Importante Todas as conexões abertas pelo MySQL Workbench automaticamente definem o conjunto de caracteres do cliente como utf8. Alterar manualmente o conjunto de caracteres do cliente, como usar SET NAMES ..., pode fazer com que o MySQL Workbench não exiba corretamente os caracteres. Para obter informações adicionais sobre conjuntos de caracteres do cliente, consulte Conjuntos de caracteres de conexão e agrupamentos.

Portanto, não consegui substituir os conjuntos de caracteres do MySQL Workbench pelas alterações my.cnf. por exemplo, 'definir nomes utf8mb4'


1

Se você está confuso com sua configuração para client e conn é redefinida após reiniciar o serviço mysql. Tente estas etapas (que funcionaram para mim):

  1. vi /etc/my.cnf
  2. adicione o conteúdo soprar e :wq [client] character-sets-dir=/usr/local/mysql/share/mysql/charsets
  3. reinicie o mysql e entre no mysql, use database, comando input status;, você encontrará o conjunto de caracteres para 'client' e 'conn' está definido como 'utf8'.

Verifique a referência para mais informações.


0

Você pode fazê-lo da maneira que funciona, e se não funcionar, você precisará reiniciar o mysql.


-1

Mude o caractere do MySQL:

Cliente

default-character-set=utf8

mysqld

character_set_server=utf8

Não devemos escrever default-character-set=utf8no mysqld, porque isso pode resultar em um erro como:

start: O trabalho falhou ao iniciar

Finalmente:

 +--------------------------+----------------------------+
 | 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/ |
 +--------------------------+----------------------------+
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.