Pergunta

Uma das respostas a uma pergunta que fiz ontem sugeriu que eu deveria certificar-se de meu banco de dados pode lidar com caracteres UTF-8 corretamente. Como posso fazer isso com o MySQL?

Foi útil?

Solução

Update:

A resposta curta -. Você deve quase sempre estar usando o charset utf8mb4 e utf8mb4_unicode_ci agrupamento

Para alter database:

ALTER DATABASE dbname CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Veja:

Resposta Original:

MySQL 4.1 e acima tem um conjunto de caracteres padrão de UTF-8. Você pode verificar isso no seu arquivo my.cnf, lembre-se de conjunto de ambos cliente e servidor (default-character-set e character-set-server).

Se você tiver dados existentes que você deseja converter para UTF-8, despejar o seu banco de dados e importá-lo de volta como UTF-8 certificando-se:

  • uso SET NAMES utf8 antes de consulta / insert no banco de dados
  • uso DEFAULT CHARSET=utf8 ao criar novas tabelas
  • neste momento seu cliente MySQL eo servidor deve estar em UTF-8 (ver my.cnf). lembre-se qualquer linguagem que você usa (como PHP) deve ser UTF-8 também. Algumas versões do PHP irá usar a sua própria biblioteca de cliente MySQL, que pode não ser UTF-8 consciente.

Se você deseja migrar os dados existentes lembre-se de fazer backup primeiro! Muita choping estranha de dados pode acontecer quando as coisas não saem como planejado!

Alguns recursos:

Outras dicas

Para fazer este 'permanente', em my.cnf:

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

Para verificar, vá para o cliente e mostrar algumas variáveis:

SHOW VARIABLES LIKE 'character_set%';

Verifique se eles estão todos utf8, exceto ..._filesystem, que deve ser binary e ..._dir, que aponta em algum lugar na instalação do MySQL.

MySQL 4.1 e acima tem um conjunto de caracteres padrão que chama utf8 mas que na verdade é apenas um subconjunto de UTF-8 (permite apenas três bytes caracteres e menores).

Use utf8mb4 como seu charset se você quiser "full" UTF-8.

A resposta curta: Use utf8mb4 em 4 locais:

  • Os bytes de seu cliente são utf8, não latin1 / CP1251 / etc.
  • SET NAMES utf8mb4 ou algo equivalente ao estabelecer a conexão do cliente para MySQL
  • CHARACTER SET utf8mb4 em todas as tabelas / colunas -., Exceto colunas que são estritamente ascii / hex / contry_code / Zip_Code / etc
  • <meta charset charset=UTF-8> se você estiver saída para HTML. (Sim a ortografia é diferente aqui.)

Mais informações ;
UTF8 todo o caminho

Os links acima fornecem a "resposta canônica detalhada é necessária para resolver todas as preocupações". -. Há um limite de espaço neste fórum

Editar

Além de CHARACTER SET utf8mb4 contendo caracteres "todos" do mundo, COLLATION utf8mb4_unicode_520_ci é discutível o 'melhor all-around' agrupamento para uso. (Há também turco, espanhol, etc, agrupamentos para aqueles que querem as nuances nesses idiomas.)

O charset é uma propriedade do banco de dados (padrão) e a mesa. Você pode ter um olhar (MySQL comandos):

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

Em outras palavras; é muito fácil para verificar o seu charset banco de dados ou alterá-lo:

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

Para alterar o conjunto de caracteres codificação para UTF-8 para o próprio banco de dados, digite o seguinte comando no mysql> prompt. ALTER DATABASE USO .. Substituir DBNAME com o nome do banco de dados:

ALTER DATABASE DBNAME CHARACTER SET utf8 COLLATE utf8_general_ci;

Esta é uma duplicata de esta questão Como converter um conjunto de caracteres de banco de dados MySQL inteiro e agrupamento para UTF-8?

I seguido solução de Javier, mas adicionou algumas linhas diferentes em my.cnf:

[myslqd]
skip-character-set-client-handshake
collation_server=utf8_unicode_ci
character_set_server=utf8 

Eu achei essa ideia aqui: http: // desenv. mysql.com/doc/refman/5.0/en/charset-server.html na primeira único comentário / usuário na parte inferior da página. Ele menciona que skip-character-set-client-aperto tem alguma importância.

dicas sobre MySQL e UTF-8 pode ser útil . Infelizmente, eles não constituem uma solução completa, gotchas apenas comuns.

Defina o seu database collation para UTF-8 em seguida, aplicar table collation para o padrão de banco de dados.

A sua resposta é que você pode configurar por Definições MySql. Na minha resposta pode ser algo saído do contexto, mas este é também saber é ajuda para você.
Como configurar Character Set e Collation .

Para aplicações que armazenam dados usando o conjunto de caracteres padrão do MySQL e agrupamento (latin1, latin1_swedish_ci), nenhuma configuração especial deve ser necessário. Se aplicações requerem armazenamento de dados usando um conjunto de caracteres diferente ou agrupamento, você pode configurar o conjunto de caracteres Informação várias maneiras:

  • Especificar configurações de caracteres por banco de dados. Por exemplo, aplicações esse banco de dados uso que se pode exigir utf8, que os pedidos que usar outro banco de dados pode exigir sjis.
  • Especificar configurações de caracteres na inicialização do servidor. Isto faz com que o servidor para utilizar as definições dadas para todas as aplicações que não fazem outra arranjos.
  • Especificar configurações de caracteres em tempo de configuração , se você construir o MySQL a partir da fonte. Isso faz com que o servidor para utilizar as definições dadas para todos aplicações, sem ter que especificá-los na inicialização do servidor.

Os exemplos mostrados aqui para a sua pergunta para set conjunto de caracteres utf8, aqui também definir agrupamento para mais útil (collation` utf8_general_ci).

Especificar configurações de caracteres por banco de dados

  CREATE DATABASE new_db
  DEFAULT CHARACTER SET utf8
  DEFAULT COLLATE utf8_general_ci;

Especificar configurações de caracteres no servidor de inicialização

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

Especificar configurações de caracteres em tempo de configuração do MySQL

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

Para ver os valores do conjunto de caracteres e sistema de agrupamento variáveis ??que se aplicam a sua conexão, usar essas instruções:

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

Isto pode ser a resposta longa, mas há toda forma, você pode usar. Esperançoso minha resposta é útil para você. Para mais informações http://dev.mysql.com/doc/ refman / 5,7 / en / charset-applications.html

SET NAMES UTF8

Esta é faz o truque

DATABASE LIGAÇÃO À 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());

Definir sua conexão banco de dados para UTF8:

  if($handle = @mysql_connect(DB_HOST, DB_USER, DB_PASS)){          
         //set to utf8 encoding
         mysql_set_charset('utf8',$handle);
  }

Foi capaz de encontrar uma solução. Publicou o seguinte, tal como especificado em 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;
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top