Agrupamento afeta apenas a classificação de texto, não tem efeito no conjunto de caracteres real dos dados armazenados.
Eu recomendaria esta configuração:
-
Defina o conjunto de caracteres para todo o banco de dados apenas, para que você não precise configurá-lo para cada tabela separadamente. O conjunto de caracteres é herdado do banco de dados para tabelas e colunas. Useutf8
como o conjunto de caracteres.
-
Defina o conjunto de caracteres para a conexão de banco de dados . Execute estas consultas depois de se conectar ao banco de dados:
SET CHARACTER SET 'utf8' SET NAMES 'utf8'
-
Defina o conjunto de caracteres para a página , usando cabeçalho HTTP e/ou metatag HTML. Um destes é suficiente. Useutf-8
como ocharset
.
Isso deve ser suficiente.
Se você deseja ter uma classificação adequada de strings em espanhol, defina collation para todo o banco de dados.
utf8_spanish_ci
deve funcionar (ci
significa Não diferencia maiúsculas de minúsculas ). Sem o agrupamento adequado, os caracteres espanhóis acentuados seriam classificados sempre por último. Observação :é possível que o conjunto de caracteres de dados que você já possui em uma tabela esteja quebrado, porque a configuração do conjunto de caracteres estava incorreta anteriormente. Você deve verificá-lo usando algum cliente de banco de dados primeiro para excluir este caso. Se estiver quebrado, basta reinserir seus dados com a configuração correta do conjunto de caracteres.
Como conjunto de caracteres trabalhar em um banco de dados
-
objetos ter um conjunto de caracteres atributo, que pode ser definido explicitamente ou herdado (servidor> banco de dados> tabela> coluna), então a melhor opção é defini-lo para todo o banco de dados
-
conexão do cliente também tem um conjunto de caracteres atributo e está dizendo ao banco de dados em qual codificação você está enviando os dados
Se os conjuntos de caracteres da conexão do cliente e do objeto de destino forem diferentes, os dados que você está enviando para o banco de dados serão automaticamente convertidos do conjunto de caracteres da conexão para o conjunto de caracteres do objeto.
Então, se você tiver, por exemplo, os dados em
utf8
, mas conexão do cliente definido como latin1
, o banco de dados quebrará os dados, porque tentará converter utf8
como se fosse latin1
.