Как вставить символ utf-8 mb4 (emoji в ios5) в mysql?

Я использую mysql 5.5.10, а его character_sets

| 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         |

Я изменил utf8mb4 на utf8 для iOS5 emoji. Они представлены кодом в 4 байт.

Но когда я вставил 3 смайла emojis, '???' находится в mysql.

Это 3F 3F 3F (Hex).

Я могу хорошо хранить iOS4 emojis, но не iOS5.

Как я могу хранить iOS5 emojis?

Пожалуйста, помогите мне.

Ответ 1

4 байта Символы Unicode еще не широко используются, поэтому не все приложения там полностью поддерживают их. MySQL 5.5 отлично работает с 4 байтовыми символами при правильной настройке - проверьте, могут ли ваши другие компоненты работать с ними.

Вот еще несколько вещей, чтобы проверить:

  • Убедитесь, что все стандартные символы и текстовые поля ваших таблиц преобразуются в utf8mb4, в дополнение к настройке наборов символов клиента и сервера, например. ALTER TABLE mytable charset=utf8mb4, MODIFY COLUMN textfield1 VARCHAR(255) CHARACTER SET utf8mb4,MODIFY COLUMN textfield2 VARCHAR(255) CHARACTER SET utf8mb4; и т.д.

    Если ваши данные уже находятся в наборе символов utf8, он должен без проблем быть преобразован в utf8mb4. Как всегда, создайте резервные копии своих данных перед тем, как попробовать!

  • Также убедитесь, что ваш уровень приложения устанавливает набор символов подключения к базе данных в utf8mb4. Двойная проверка этого на самом деле происходит - если вы используете более старую версию вашей клиентской библиотеки mysql выбранной клиентской базы, она, возможно, не была скомпилирована с поддержкой utf8mb4, и она не будет правильно настроить кодировку. Если нет, возможно, вам придется обновить его или скомпилировать самостоятельно.

  • При просмотре ваших данных через клиент mysql убедитесь, что вы находитесь на машине, которая может отображать emoji, и запускайте SET NAMES utf8mb4 перед запуском любых запросов.

Как только каждый уровень вашего приложения сможет поддерживать новые символы, вы сможете использовать их без какого-либо повреждения.

Ответ 2

Недавно я написал подробное руководство по переключению с MySQL utf8 на utf8mb4. Если вы выполните шаги там, все должно работать правильно. Вот прямые ссылки на каждый отдельный шаг процесса:

Надеюсь, что это поможет.