Hoje eu estava trabalhando em um projeto em CakePHP 2.1 e quando eu fazia:
1 |
$this->Modelo->find('list') |
meu resultado vinha cheio de erros de codificação onde as letras estavam acentuadas.
Como de costume, fui verificar o cabeçalho do layout, para ter certeza que tinha usado UTF-8:
1 |
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> |
Depois, fui conferir no core.php se também estava definido UTF-8:
1 |
Configure::write('App.encoding', 'UTF-8'); |
Então, fui conferir a conexão com o banco no database.php para ter certeza que estava em UTF-8:
1 |
'encoding' => 'utf8' |
E para o meu ódio, sim, estava tudo ok em todos os arquivos. Mas então o que poderia ser? Só se meu MySQL não estava configurado com utf-8, nem minha tabela e campos…
Para fazer essa verificação, rodei os seguintes comandos no console do MySQL:
1 2 |
SHOW VARIABLES LIKE '%CHARACTER%'; SHOW VARIABLES LIKE '%COLLATION%'; |
+————————–+—————————-+
| Variable_name | Value |
+————————–+—————————-+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+————————–+—————————-+
+———————-+——————-+
| Variable_name | Value |
+———————-+——————-+
| collation_connection | latin1_swedish_ci |
| collation_database | utf8_general_ci |
| collation_server | latin1_swedish_ci |
+———————-+——————-+
Encontrado meu problema, ainda tinham coisas para serem configuradas para UTF-8. Para fazer esta configuração, foi só rodar o comando abaixo no console do MySQL:
1 |
SET <variable_name> = utf8; |
exemplo:
1 |
SET character_set_client = utf8; |
Com isto, consegui resolver meu problema de codificação, lembrando que o que já estava cadastrado em latin1 precisou ser convertido para utf-8.
muito útil …