2012-03-01 3 views
10

Stiamo sviluppando un'app per iPhone che invierebbe le emoticon da iPhone a PHP sul lato server e le inserisce in tabelle MySQL. Sto facendo il lavoro sul lato server.Le emoticon iPhone vengono inserite in MySQL ma diventano valori vuoti

Ma dopo che l'istruzione di inserimento è stata eseguita correttamente, il valore inserito diventa vuoto.
Quello che potrei inserire nel campo (varchar) correttamente è testo, ma una volta incluse le emoticon,
, solo il testo potrebbe essere inserito e le emoticon verrebbero tagliate automaticamente.

Qualcuno mi dia consigli su come impostare il tipo di campo su Blog in modo che possa memorizzare i dati dell'immagine.
Ma il valore inserito non include sempre le emoticon e la dimensione è piccola.

* Sto usando mysql_real_escape_string per inserire valore.

+0

Mostraci la frase di inserimento –

+0

Risposta breve: Devi usare "utf8mb4' in MySQL. –

risposta

22

La maggior parte degli emoji iOS utilizza punti codice sopra il piano multilingue di base della tabella Unicode. Ad esempio, (VISO SORRIDENTE CON BOCCA APERTA E OCCHI SORRIDENTI) è su U + 1F604.

OS X character viewer

Ora, vedere http://dev.mysql.com/doc/refman/5.5/en/charset-unicode.html.

MySQL prima della versione 5.5 supporta solo UTF-8 per BMP, che include caratteri tra U + 0000 e U + FFFF (vale a dire solo un sottoinsieme di UTF-8 effettivo; MySQL utf8 non è UTF-8 reale). Non è possibile memorizzare il carattere nel punto di codice U + 1F604 o altri "caratteri alti" simili. MySQL 5.5+ supporta utf8mb4 (UTF-8 effettivo), utf16 e utf32, che sono in grado di codificare questi caratteri. Se utilizzi MySQL 5.5+, utilizza uno di questi set di caratteri colonna e assicurati di utilizzare lo stesso set di caratteri per la codifica della connessione da/per PHP. Se si utilizza MySQL < 5.5, sarà necessario utilizzare un tipo di colonna BLOB. Quel tipo memorizza i byte non elaborati senza preoccuparsi dei "caratteri" in esso contenuti. Lo svantaggio è che non sarai in grado di cercare o indicizzare in modo efficiente il testo.

+0

Grazie per la risposta. La versione MySQL che stiamo usando ora è _5.1.54 _... Quindi, proverei il tipo di dati blob o l'aggiornamento a _5.5_ e useremo 'utf8mb4' per il mio campo. Tornerò più tardi;) –

+0

Grazie @deceze. Quello che ho appena confermato ora è che le emoticon verranno memorizzate correttamente dopo aver cambiato il tipo di campo da varchar a blob nel nostro MySQL _5.1.54_. Stiamo discutendo cosa dovrebbe applicarsi al nostro server-side in quanto alcune configurazioni sarebbero cambiate nel codice php (o nel framework CakePHP). –

+1

Infine, abbiamo eseguito l'aggiornamento a ** 5.5 + ** e le emoticon vengono visualizzate normalmente, in modo che possano essere compatibili con il nostro sviluppo futuro. Grazie ancora, @deceze. –

1

Alcuni dei personaggi delle emoji funzionano con configurazioni mysql non blobate più vecchie perché sono codificati usando un codepoint da 3 byte e mysql può memorizzare un carattere da 3 byte. Se non è possibile aggiornare mysql né utilizzare i BLOB per qualsiasi motivo, è possibile eliminare i codepoint da 4 byte e mantenere quelli a 3 byte.

Se il computer dispone di funzionalità emoji, ecco un elenco dei caratteri emoji 3 byte iOS:

☺❤✨❕❔✊✌✋☝☀☔☁⛄⚡☎➿✂⚽⚾⛳ ♠ ♥ ♣ ♦ 〽☕⛪⛺⛲⛵✈⛽⚠♨1⃣2⃣3⃣4⃣5⃣6⃣7⃣8⃣9⃣0⃣ # ⃣⬆⬇⬅➡↗↖↘↙ ◀ ▶ ⏪⏩♿㊙㊗✳✴♈♉♊♋♌♍♎♏♐♑♒♓⛎⭕❌ © ® ™