2012-04-14 15 views
8

Después de leer todos los temas sobre emoji en SO, estoy limitado a pedir ayuda. La pregunta parece ser casi la misma: recibí una aplicación de iPhone enviando a través de emoji PHP a MySQL DB, puedo ver algunos símbolos en los registros, como por ejemplo "paraguas" y "nube" pero otros no (cara enojada, cara sonriente y otro).Emoji en MySQL y PHP: ¿por qué algunos símbolos sí otros no?

¿Por qué algunos sí y otros no?

  • MySQL Colación: utf8mb_unicode_ci
  • Tabla de colación: utf8mb_unicode_ci
  • campo, varchar, el cotejo: utf8mb_unicode_ci

instalación de PHP:

mysql_query("SET CHARACTER SET utf8mb4"); 
    mysql_query("SET NAMES utf8mb4"); 

Los símbolos no mostró dentro del registro se muestran como signo de interrogación "?"

Respuesta

11

Algunos emoji están codificados con 3 bytes. Si sus computadoras son compatibles con emoji, aquí están los emoji de 3 bytes:

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

El resto se codifica utilizando 4 bytes y no funcionará a menos que actualice mysql a utf8mb4. Parece que no has actualizado completamente a utf8mb4 de alguna manera.

+0

Muchas gracias Jake, voy a buscar en su dirección. En este momento estoy bastante seguro de que convertí los campos objetivo y la tabla en la colación correcta, pero debo perder algo. Voy a actualizar este tema. Gracias – Fabrizio

+0

He verificado y tienes razón, los 3 bytes emoji están representados bien. Lo que extraño es dónde necesito cambiar la intercalación. El campo donde debo registrar el emoji tiene la intercalación utf8mb4_unicode_ci. La tabla que contiene ese campo tiene la intercalación utf8mb4_unicode_ci. En la configuración general (phpMyAdmin) veo que la intercalación de MySQL es utf8_general_ci y cuando intento cambiar a utf8mb4_unicode_ci, parece volver automáticamente a la configuración anterior. No sé si el problema es por esta razón. Seguiré buscando. – Fabrizio

+3

@Fabrizio He escrito [una guía detallada sobre cómo actualizar de 'utf8' a' utf8mb4'] (http://mathiasbynens.be/notes/mysql-utf8mb4) - quizás te ayude. –

Cuestiones relacionadas