2011-10-18 12 views
53

Sto usando mysql 5.5.10, e le sue character_sets sonoCome inserire il carattere utf-8 mb4 (emoji in ios5) in mysql?

| character_set_client  | utf8mb4     | 
| character_set_connection | utf8mb4     | 
| character_set_database | utf8mb4     | 
| character_set_filesystem | binary      | 
| character_set_results | utf8mb4     | 
| character_set_server  | utf8mb4     | 
| character_set_system  | utf8      | 
| character_sets_dir  | /usr/share/mysql/charsets/ | 
| collation_connection  | utf8mb4_general_ci   | 
| collation_database  | utf8mb4_general_ci   | 
| collation_server   | utf8mb4_general_ci   | 

ho cambiato utf8mb4 da utf8 per emoji di iOS5. Sono rappresentati dal codice 4byte.

Ma quando ho inserito 3 emoji di smiley, '???' è in mysql.

Sono 3F 3F 3F (Hex).

Posso memorizzare bene le emoji di iOS4, ma non quelle di iOS5.

Come posso archiviare gli emoji di iOS5?

Per favore aiutatemi.

+1

mysql mostra phpadmin ???, ma l'app iOS può mostrare le emoji. –

+0

Vedere anche http://stackoverflow.com/questions/38363566/trouble-with-utf8-characters-what-i-see-is-not-what-i-stored/, in particolare la discussione di "punti interrogativi". –

risposta

91

I caratteri Unicode a 4 byte non sono ancora ampiamente utilizzati, quindi non tutte le applicazioni li supportano completamente. MySQL 5.5 funziona correttamente con 4 caratteri byte se configurato correttamente - controlla se anche gli altri componenti possono funzionare con essi.

Ecco un paio di altre cose da controllare:

  • Assicurarsi che i set di caratteri di default tutte le tabelle e dei campi di testo vengono convertiti in utf8mb4, oltre a stabilire i set di caratteri client server &, per esempio ALTER TABLE mytable charset=utf8mb4, MODIFY COLUMN textfield1 VARCHAR(255) CHARACTER SET utf8mb4,MODIFY COLUMN textfield2 VARCHAR(255) CHARACTER SET utf8mb4; e così via.

    Se i dati sono già nel set di caratteri utf8, è necessario convertire in utf8mb4 in posizione senza problemi. Come sempre, effettua il backup dei dati prima di provare!

  • Assicurarsi inoltre che il livello dell'app imposta il set di caratteri delle connessioni del database su utf8mb4. Verifica che questo stia effettivamente accadendo: se stai utilizzando una versione precedente della libreria client mysql del tuo framework scelto, potrebbe non essere stato compilato con il supporto di utf8mb4 e non imposterà correttamente il set di caratteri. In caso contrario, potrebbe essere necessario aggiornarlo o compilarlo da soli.

  • Durante la visualizzazione dei dati tramite il client mysql, assicurarsi di essere su una macchina in grado di visualizzare emoji ed eseguire un SET NAMES utf8mb4 prima di eseguire qualsiasi query.

Una volta che ogni livello dell'applicazione è in grado di supportare i nuovi caratteri, dovresti essere in grado di usarli senza alcun danno.

+1

Come verificare il 2 ° passo? – BufferStack

+0

'grep -R" SET NAMES "*' – redolent

+0

Se 'textfield1' è indicizzato, si potrebbero avere problemi a causa degli indici ristretti a 767 byte. (Ci sono molti thread che parlano di questo, cercare "191".) –

63
+0

Salve, al punto 3, devo farlo per ogni singola tabella, colonna nel mio db? o solo al tavolo e alla colonna in cui voglio memorizzare gli emoji? perché in questo momento sto cambiando solo una colonna e non appena ho impostato 'SET character_set_results = utf8mb4;' Non posso eseguire alcuna query su nessuna tabella. Sto collegando un 'Server inviato a un utente sconosciuto. Si prega di segnalare! Errore! (anche per le query selezionate) – iamserious

+0

@iamserious - Non impostare solo '... risultati', impostare tutte le 3 cose, come con' SET NAMES' oi parametri di connessione. –

+0

Grande tutorial! Sapete perché dopo aver impostato 'character-set-server = utf8mb4' in my.cnf, dopo aver eseguito la query sul database, il set di caratteri è effettivamente latin1? Sai perché non si aggiorna? Grazie mille! – johnnyfittizio

Problemi correlati