Mysql
 sql >> Base de données >  >> RDS >> Mysql

Impossible de stocker les emoji dans la base de données

D'accord, j'ai finalement réussi à le faire fonctionner ! Merci à tous ceux qui ont essayé de m'aider, en particulier @Rick James et @Gerard Roche.

SUGGESTION :

Si vous avez besoin de travailler avec des emoji, faites d'abord des tests simples sur localhost. Créez une nouvelle base de données et créez une nouvelle application à des fins de test.

Si vous suivez les étapes que j'ai écrites dans la question ou si vous suivez ce tutoriel : https://mathiasbynens.be/notes/mysql-utf8mb4#utf8-to-utf8mb4 ça doit marcher.

En travaillant localement sur une nouvelle application de base, vous aurez plus de contrôle et plus d'espace pour effectuer tous les tests dont vous avez besoin.

SOLUTION :

Dans mon cas, le problème était dans la configuration de la base de données dans CodeIgniter. Il ne configurait pas correctement le char_set et la collation pour une négligence stupide :je redéfinissais les paramètres de la base de données dans la fonction qui enregistre les messages pour être sûr qu'elle fonctionnait avec la base de données mobile.

AVANT :

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       
}

APRÈS :

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

    // other code to save message
}

CONCLUSION :

L'application doit définir correctement la connexion à la base de données. Si la base de données est correctement configurée mais que vous n'établissez pas la bonne connexion avec votre application, cela ne fonctionnera pas.

Donc, si vous rencontrez des problèmes similaires, assurez-vous que l'API configure correctement le char_set comme utf8mb4 et db_collat comme utf8mb4_unicode_ci .