Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

como lidar com acentos e caracteres estranhos em um banco de dados?


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:

  1. 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. Use utf8 como o conjunto de caracteres.

  2. 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'
    

  3. Defina o conjunto de caracteres para a página , usando cabeçalho HTTP e/ou metatag HTML. Um destes é suficiente. Use utf-8 como o charset .

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 .