Xmd Tecnologia

Por Uma Web Melhor

E Agora o que usar? UTF-8 x UTF8MB4

E Agora o que usar? UTF-8 x UTF8MB4
  • Compartilhe esse post
  • Compartilhar no Facebook00
  • Compartilhar no Google Plus00
  • Compartilhar no Twitter

Você já tentou importar feeds de noticias, ou postagens com emoticons no seu Schema Mysql?

Você já tentou importar feeds de noticias, ou postagens com emoticons no seu Schema Mysql?
Se já tentou vai saber o que estou falando, que o UTF-8 do Mysql não é o UTF-8 de fato completo, ao criar um schema no Mysql e defini-lo como UTF-8 ainda que seje utf8_unicode_ci, você não esta criando um schema totamente compativel com todos caracteres.

A Oracle mantenedora do Mysql, lançou na versão 5.5 do Mysql um novo UTF8 um tanto estranho não, já que aprendemos que UTF8 é capaz de suportar todos os caracteres. Mas na verdade ela lançou uma correção para que realmente exista o UTF8 dentro do Mysql, como já havia utilizado o titulo de UTF8 no Mysql então a Oracle lançou o UTF8MB4 que segue agora os padrões completos do UTF-8.

Mas você deve esta se perguntando trabalho a anos com utf8_unicode_ci no meu banco de dados e nunca encontrei imcompatibilidade, certo o momento mais critico e desesperador é quando seu sistema tem que receber outros caracteres como por exemplo, muito utilizado hoje na web os emoticons, se fizer o teste no seu Mysql vai descobrir que ele não vai cadastrar, porque o utf8_unicode_ci ele suporta apenas 3 bytes enquanto os emoticons tem 4 bytes. Nossa mas e agora como vou resolver isso? Não se desespere você pode facilmente resolver isso, pois o UTF8MB4 suporto tudo do utf8_unicode_ci, e agora vou ensinar você que tem um schema Mysql com codificação utf8_unicode_ci, migrar para UTF8MB4.

Bora Lá Então?

Vamos primeiro definir a codificação de conexão utf8mb4 e, em seguida, alterar o conjunto de caracteres do banco de dados e colação para ele:

SET NAMES utf8mb4;
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;

(Substituindo database_name pelo nome do banco de dados.)

Em seguida, precisamos converter as tabelas relevantes para utf8mb4 / utf8mb4_unicode_ci (você precisará executar isso para cada tabela):

ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

(Substituindo table_name com o nome da tabela do banco de dados.)

Finalmente, precisamos atualizar o conjunto de caracteres e o agrupamento para a(s) coluna(s):

ALTER TABLE table_name CHANGE column_name column_name VARCHAR(140) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL;

Leia o último comando cuidadosamente, pois ele precisará ser modificado de acordo com suas necessidades específicas. O importante a notar é o CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci.
(Como com os outros comandos que você precisa substituir table_name e column_name adequadamente.)

Tenha em mente que a mudança de utf8 que utfmb4 afeta o comprimento máximo de colunas e chaves de índice. Os comprimentos máximos das colunas permanecerão inalterados ao modificar as tabelas com os comandos discutidos aqui; Mas em termos de caracteres reais, a quantidade que pode ser armazenada é reduzida.
Esta é uma conseqüência da mudança de ser capaz de armazenar apenas 3 bytes até 4! Talvez seja necessário atualizar esses comprimentos se isso for relevante para você.

Pode ser uma boa idéia para certificar-se de cada tabela que foi convertido é reparado e otimizado após fazer as alterações acima. Você pode executar o seguinte para cada tabela modificada:

REPAIR TABLE table_name;
OPTIMIZE TABLE table_name;


Como alternativa, use o mysqlcheck para reparar e otimizar tudo de uma só vez

$ mysqlcheck -u root -p --auto-repair --optimize --all-databases


Finalmente


Tudo deve estar pronto agora, mas não se esqueça de atualizar como seu aplicativo se conecta ao banco de dados para que ele use a nova codificação. Por exemplo, no CakePHP 3 a codificação da fonte de dados precisa ser atualizada para utf8mb4:

'Datasources' => [
'default' => [
...
'database' => 'database_name',
'encoding' => 'utf8mb4',
...
]
]

Devemos agora ser bom para ir e começar a salvar tweets contendo emoticons (ou qualquer outra coisa usá-los).

Espero que isso tenha sido informativo e útil para você.


Bora nosso sucesso nos espera ;)

 

  • Compartilhe esse post
  • Compartilhar no Facebook00
  • Compartilhar no Google Plus00
  • Compartilhar no Twitter