Comment insérer un caractère utf-8 mb4 (emoji dans iOS5) dans mysql?

j'utilise mysql 5.5.10, et ses caractères sont

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

j'ai changé utf8mb4 de utf8 pour emoji de iOS5. Ils sont représentés par le code 4byte.

mais quand j'ai inséré 3 smiley emojis,'???'est dans mysql.

ils sont 3F 3F 3F (Hex).

je peux bien stocker les emojis de iOS4, mais pas ceux de iOS5.

Comment pourrais-je stocker les emojis de iOS5?

S'il vous plaît m'aider.

55
demandé sur Mathias Bynens 2011-10-19 02:03:36

2 réponses

4 caractères octets Unicode ne sont pas encore largement utilisés, donc toutes les applications là-bas ne les supporte pas entièrement. MySQL 5.5 fonctionne très bien avec 4 caractères octets quand il est correctement configuré – vérifiez si vos autres composants peuvent fonctionner avec eux aussi.

voici d'autres choses à vérifier:

  • assurez-vous que tous les jeux de caractères et les champs de texte par défaut de vos tables sont convertis en utf8mb4, en plus de définir le client & serveur de jeux de caractères, par exemple ALTER TABLE mytable charset=utf8mb4, MODIFY COLUMN textfield1 VARCHAR(255) CHARACTER SET utf8mb4,MODIFY COLUMN textfield2 VARCHAR(255) CHARACTER SET utf8mb4; et ainsi de suite.

    si vos données sont déjà dans le jeu de caractères utf8, il devrait convertir en utf8mb4 en place sans aucun problème. Comme toujours, sauvegardez vos données avant d'essayer!

  • assurez-vous également que votre calque d'application fixe le jeu de caractères de ses connexions de base de données à utf8mb4. Revérifiez ce qui se passe réellement – si vous utilisez une version plus ancienne du client mysql de votre framework choisi bibliothèque, il se peut qu'il n'ait pas été compilé avec le support utf8mb4 et qu'il ne définisse pas correctement le jeu de caractères. Si non, vous devrez mettre à jour ou de le compiler vous-même.

  • lorsque vous visualisez vos données via le client mysql, assurez-vous que vous êtes sur une machine qui peut afficher emoji, et exécutez un SET NAMES utf8mb4 avant de lancer des requêtes.

une fois que chaque niveau de votre application peut supporter les nouveaux caractères, vous devrait pouvoir les utiliser sans aucune corruption.

92
répondu Nick Baicoianu 2011-11-13 06:01:04