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

Não é possível inserir corretamente caracteres gregos no banco de dados mysql


Seu problema está relacionado à sua codificação de charset. É importante que todo code tem o mesmo charset para evitar problemas em que os caracteres são exibidos incorretamente.

Existem algumas configurações que precisam ser definidas corretamente e eu recomendo fortemente o UTF-8, pois ele contém a maioria das letras que você precisa (escandinavo, grego, árabe, russo etc.).

Aqui está uma pequena lista de coisas que devem ser definidas para um conjunto de caracteres específico.

Cabeçalhos

  • Configurando o charset nos cabeçalhos HTML e PHP para UTF-8

    • PHP:
      header('Content-Type: text/html; charset=utf-8');
      

      (Os cabeçalhos PHP devem ser colocados antes de qualquer saída (eco, espaço em branco, HTML)!)

    • HTML:
      <meta charset=utf-8" />
      

      (Os cabeçalhos HTML são colocados dentro do <head> / </head> marcação)

Conexão

  • Você também precisa especificar o charset na própria conexão . Para o seu exemplo PDO, é feito assim
    $handler = new PDO('mysql:host=localhost;dbname=database;charset=utf8', 'username', 'password', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET CHARACTER SET UTF8"));
    

    Observe o charset=utf8 -atributo. Outras APIs do MySQL têm maneiras diferentes de fazer isso, caso você use outra coisa no futuro.

Banco de dados

  • Seu banco de dados e suas tabelas devem ser definidas como UTF-8. Observe que o conjunto de caracteres não o mesmo que colação. Vejo que você já definiu seu agrupamento para UTF-8, então isso é bom, mas faça o mesmo para todo o banco de dados e todas as tabelas.

    Você pode fazer isso executando as consultas abaixo uma vez para cada banco de dados e tabelas (por exemplo, no phpMyAdmin)
    ALTER DATABASE databasename CHARACTER SET utf8 COLLATE utf8_unicode_ci; 
    ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
    

    Observe que quaisquer dados já armazenados no banco de dados não terão automaticamente seu conjunto de caracteres quebrado corrigido. Portanto, é importante que você faça isso antes de inserir os dados ou reinsira-os após definir o conjunto de caracteres.

especificação do php.ini

  • No seu php.ini arquivo, você deve especificar o charset padrão para sua plataforma, como este
    default_charset = "utf-8";
    

Codificação de arquivo
  • Também é importante que o .php arquivo em si é codificado em UTF-8. Se você estiver usando o Notepad++ para escrever seu código, isso pode ser feito no menu suspenso "Formato" na barra de tarefas.

Emojis
  • No MySQL (tanto na tabela, banco de dados e objeto de conexão), você precisará especificar o utf8mb4 charset, ao contrário do utf8 normal , se você deseja trabalhar com emojis.

Eu não sei muito sobre Java, mas se você pode definir atributos para UTF-8 também, faça isso. Em essência, tudo o que pode ser definido para um conjunto de caracteres específico deve ser definido para o mesmo.

Se você seguir todas as dicas acima, é provável que seu problema seja resolvido. Caso contrário, você pode dar uma olhada nesta postagem do StackOverflow: UTF-8 até o fim .