web-dev-qa-db-fra.com

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

J'utilise mysql 5.5.10, et ses jeux de 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 d'utf8 pour les emoji d'iOS5. Ils sont représentés par un code de 4 octets.

Mais quand j'ai inséré 3 emojis souriants, '???' est dans mysql.

Ils sont 3F 3F 3F (Hex).

Je peux bien stocker les emojis d'iOS4, mais pas ceux d'iOS5.

Comment puis-je stocker les emojis d'iOS5?

Aidez-moi, s'il vous plaît.

55
plenty

Les caractères Unicode de 4 octets ne sont pas encore largement utilisés, donc toutes les applications ne les prennent pas entièrement en charge. MySQL 5.5 fonctionne correctement avec des caractères de 4 octets lorsqu'il est correctement configuré - vérifiez si vos autres composants peuvent également fonctionner avec eux.

Voici quelques autres choses à vérifier:

  • Assurez-vous que tous les jeux de caractères et champs de texte par défaut de vos tables sont convertis en utf8mb4, en plus de définir les jeux de caractères client et serveur, 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, elles devraient être converties en utf8mb4 en place sans aucun problème. Comme toujours, sauvegardez vos données avant d'essayer!

  • Assurez-vous également que votre couche d'application définit le jeu de caractères de ses connexions à la base de données sur utf8mb4. Vérifiez que cela se produit réellement - si vous exécutez une ancienne version de la bibliothèque cliente mysql de votre framework choisi, elle peut ne pas avoir été compilée avec le support utf8mb4 et elle ne définira pas correctement le jeu de caractères. Sinon, vous devrez peut-être le mettre à jour ou le compiler vous-même.

  • Lorsque vous consultez vos données via le client mysql, assurez-vous que vous êtes sur une machine qui peut afficher des emoji et exécutez un SET NAMES utf8mb4 avant d'exécuter des requêtes.

Une fois que chaque niveau de votre application peut prendre en charge les nouveaux personnages, vous devriez pouvoir les utiliser sans aucune corruption.

93
Nick Baicoianu
65
Mathias Bynens