Como configurar o conjunto de caracteres global no MySQL

12

Tentei alterar o conjunto de caracteres para o nosso MySQL via my.cnf e ele falhou. Adicionei as configurações de charset listadas abaixo:

# 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

Quando eu os habilitei, o MySQL falhou ao iniciar. Como posso garantir que tudo seja o padrão utf8 - sempre?

Atualizar

Ainda existem alguns lugares com 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

Infelizmente ainda não encontrei uma solução ... alguma idéia?

Atualmente, estou usando esta configuração com sucesso:

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


[mysql]
default-character-set = utf8

Mas o PHPMyAdmin ainda está mostrando algum 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
fonte

Respostas:

23

Você precisa incorporar o seguinte no seu arquivo 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

Você pode encontrar mais informações nas seguintes páginas do manual

Em resposta à resposta de Mark, se você precisar converter tabelas / bancos de dados existentes no conjunto de caracteres correto, precisará de uma ALTERconsulta adequada . Algo semelhante ao abaixo:

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

Como alternativa, há um ótimo script PHP aqui que faz isso por você.

Ben Swinburne
fonte
Eu segui as instruções e verificados os links da documentação ... continua a ter alguns problemas (ver ^)
Sempre que eu adiciono collation-server = utf8_general_cià mysqldseção, o mysql falha ao reiniciar
Você pode ver o que está no arquivo de log? Ele deve fornecer uma mensagem de erro sobre o motivo da falha. Presumo que seu mysqld foi compilado com o conjunto geral de caracteres utf8 incluído?
Sim, acho que foi ... qual arquivo de log?
1
Funciona para mim (Debian 8, MySQL 5.5), exceto na default-character-set = utf8linha de [mysqld]seção. A adição desta linha resulta no mysqld demorando uma eternidade para reiniciar. O suporte a Unicode, no entanto, funciona muito bem, mesmo sem essa linha.
baixo
2

A resposta de Ben está bem, mas alterar as configurações ABSOLUTAMENTE NÃO altera os conjuntos de caracteres ou agrupamentos de tabelas existentes. Faça isso com uma instrução ALTER TABLE apropriada.

Observe que, se você não especificar, as tabelas serão criadas no conjunto de caracteres padrão do banco de dados. Essa é uma configuração por banco de dados que pode ser ajustada com ALTER DATABASE. Isso também não está definido no my.cnf.


fonte
1
Novos bancos de dados herdarão as configurações padrão do mysql, certo?