Mysql
 sql >> Database >  >> RDS >> Mysql

Impossibile memorizzare emoji nel database

Ok, finalmente sono riuscito a farlo funzionare! Grazie a tutti coloro che hanno cercato di aiutarmi, in particolare @Rick James e @Gerard Roche.

SUGGERIMENTO:

Se devi lavorare con le emoji prima di tutto fai dei semplici test su localhost. Crea un nuovo database e crea una nuova app a scopo di test.

Se segui i passaggi che ho scritto nella domanda o se segui questo tutorial: https://mathiasbynens.be/notes/mysql-utf8mb4#utf8-to-utf8mb4 deve funzionare.

Lavorando localmente su una nuova app di base avrai più controllo e più spazio per fare tutti i test di cui hai bisogno.

SOLUZIONE:

Nel mio caso il problema era nella configurazione del database in CodeIgniter. Non stava impostando correttamente il char_set e le regole di confronto per una stupida dimenticanza:stavo sovrascrivendo le impostazioni del database nella funzione che salva i messaggi per essere sicuro che funzionasse con il database mobile.

PRIMA:

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       
}

DOPO:

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

    // other code to save message
}

CONCLUSIONE:

L'app deve impostare correttamente la connessione al database. Se il database è configurato correttamente ma non esegui la connessione corretta con l'app, non funzionerà.

Quindi, se riscontri problemi simili, assicurati che l'API abbia impostato correttamente il char_set come utf8mb4 e db_collat come utf8mb4_unicode_ci .