Emoji на MySQL и PHP: почему одни символы да другие нет?
После прочтения всех тем о смайликах на SO я ограничен, чтобы попросить некоторую помощь. Вопрос, кажется, почти тот же: я получил приложение для iPhone, отправляющее через PHP emoji в MySQL DB, я могу видеть некоторые символы в записях, например, "зонтик" и "облако", но другие нет (сердитое лицо, улыбающееся лицо и другие).).
Почему одни да, а другие нет?
- MySQL Collation: utf8mb_unicode_ci
- Сортировка таблицы: utf8mb_unicode_ci
- Поле, varchar, сопоставление: utf8mb_unicode_ci
Настройка PHP:
mysql_query("SET CHARACTER SET utf8mb4");
mysql_query("SET NAMES utf8mb4");
Символы, не показанные внутри записи, отмечены знаком вопроса?
1 ответ
Некоторые смайлики кодируются с использованием 3 байтов. Если ваш компьютер поддерживает Emoji, вот 3-х байт Emoji:
☺❤✨❕❔✊✌✋☝☀☔☁⛄⚡☎➿✂⚽⚾⛳ ♠ ♥ ♣ ♦ 〽☕⛪⛺⛲⛵✈⛽⚠♨1⃣2⃣3⃣4⃣5⃣6⃣7⃣8⃣9⃣0⃣ # ⃣⬆⬇⬅➡↗↖↘↙ ◀ ▶ ⏪⏩♿ ㊙㊗✳✴♈♉♊♋♌♍♎♏♐♑♒♓⛎⭕❌ © ® ™
Остальные кодируются с использованием 4 байтов и не будут работать, если вы не обновите mysql до utf8mb4. Похоже, вы каким-то образом не полностью обновились до utf8mb4.