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

Não é possível armazenar emoji no banco de dados


Ok, finalmente consegui fazer funcionar! Obrigado a todos que tentaram me ajudar, especialmente @Rick James e @Gerard Roche.

SUGESTÃO:

Se você precisa trabalhar com emoji antes de tudo faça testes simples no localhost. Crie um novo banco de dados e faça um novo aplicativo para fins de teste.

Se você seguir os passos que escrevi na pergunta ou se seguir este tutorial: https://mathiasbynens.be/notes/mysql-utf8mb4#utf8-to-utf8mb4 deve funcionar.

Trabalhando localmente em um novo aplicativo básico, você terá mais controle e mais espaço para fazer todos os testes necessários.

SOLUÇÃO:

No meu caso o problema estava na configuração do banco de dados no CodeIgniter. Não estava configurando corretamente o char_set e o collation para uma visão estúpida:eu estava substituindo as configurações do banco de dados na função que salva mensagens para ter certeza de que estava funcionando com o banco de dados móvel.

ANTES:
function message_save ( $data = FALSE )
{   
    $project_db_config                  = array();
    $project_db_config['hostname']      = 'MY_HOST';
    $project_db_config['username']      = 'MY_USERNAME';
    $project_db_config['password']      = 'MY_PASSWORD';
    $project_db_config['database']      = 'MY_DATABASE';

    $mobile_db                          = $this->load->database( $project_db_config, TRUE );

    // other code to save message       
}

DEPOIS:
function message_save ( $data = FALSE )
{
    $mobile_db_connection = $this->load->database('admin_mobile_mh', TRUE);

    // other code to save message
}

CONCLUSÃO:

O aplicativo deve definir a conexão com o banco de dados corretamente. Se você tiver o banco de dados configurado corretamente, mas não fizer a conexão adequada com seu aplicativo, ele não funcionará.

Portanto, se você encontrar problemas semelhantes, certifique-se de que a API configure corretamente o char_set como utf8mb4 e db_collat como utf8mb4_unicode_ci .