J'utilise le caractère Emoji dans mon projet. Ces caractères sont enregistrés (??) dans la base de données mysql. J'avais utilisé le classement par défaut de la base de données dans utf8mb4_general_ci
. Cela montre
1366 Valeur de chaîne incorrecte: '\ xF0 \ x9F \ x98 \ x83 \ xF0 \ x9F ...' pour la colonne 'commentaire' à la ligne 1
ALTER TABLE Tablename CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin
insert into tablename (column1,column2,column3,column4,column5,column6,column7) values ('273','3','Hdhdhdh😜😀😊😃hzhzhzzhjzj 我爱你 ❌',49,1,'2016-09-13 08:02:29','2016-09-13 08:02:29'
Définissez utf8mb4 dans la connexion à la base de données:$database_connection = new mysqli($server, $user,$password,$database_name); $database_connection->set_charset("utf8mb4");
Réponses:
Étape 1, modifiez le jeu de caractères par défaut de votre base de données:
étape 2, définissez le jeu de caractères lors de la création de la table:
ou modifier la table
la source
1) Base de données: remplacez le classement par défaut de la base de données par
utf8mb4
.2) Table: modifiez le classement de la table en
CHARACTER SET utf8mb4 COLLATE utf8mb4_bin
.Requete:
3) Code:
4) Définir
utf8mb4
dans la connexion à la base de données:la source
SET NAMES utf8mb4;
pour commencer à enregistrer des émoticônes; avant cette commande, il les enregistrait sous??
Les bases de données et les tables doivent avoir un jeu de caractères
utf8mb4
et un classementutf8mb4_unicode_ci
.Lors de la création d'une nouvelle base de données, vous devez utiliser:
Si vous avez une base de données existante et que vous souhaitez ajouter un support:
Vous devez également définir le jeu de caractères et le classement corrects pour vos tables:
ou modifiez-le si vous avez des tables existantes avec beaucoup de données:
Notez que ce
utf8_general_ci
n'est plus la meilleure pratique recommandée. Voir les questions et réponses associées:Quelle est la différence entre utf8_general_ci et utf8_unicode_ci sur Stack Overflow.
la source
ALTER TABLE mytable MODIFY my_emoji_friendly_text_column VARCHAR(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
utf8mb4_bin
vsutf8mb4_unicode_ci
pour les colonnes?Si vous utilisez Solr + Mysql + Java, vous pouvez utiliser:
Cela peut être utilisé:
Dans le cas ci-dessus, c'est l'une des solutions pour stocker vos émoticônes dans votre système.
Étapes pour l'utiliser:
Bibliothèque utilisée: import java.net.URLDecoder; import java.net.URLEncoder;
Exemple de code:
la source
%
, votre décodage sera interrompu.J'ai mis à jour ma base de données et ma table pour passer de utf8 à utf8mb4 . Mais rien ne fonctionne pour moi. Ensuite, j'ai essayé de mettre à jour le type de données de colonne en blob , heureusement cela a fonctionné pour moi et les données ont été enregistrées. Même ma base de données et ma table sont toutes les deux CHARACTER SET utf8 COLLATE utf8_unicode
la source
La commande pour modifier la colonne est:
Et nous devons utiliser type =
BLOB
L'exemple à modifier est le suivant: -
J'ai vérifié que les dernières bases de données mySQL et autres n'ont pas besoin
''
d'être utilisées dans la commande sur nom_table, nom_colonne, etc.Extraire et enregistrer les données: enregistrez directement le contenu du chat dans la colonne et pour récupérer les données, récupérez les données sous forme de tableau d'octets à
(byte[])
partir de la colonne db, puis convertissez-les enstring
par exemple (code Java)la source
text
/varchar
en ablob
et vous avez terminé. Madness pour convertir charset et collation sur toute la base de données juste pour ça :)Ma réponse ne fait qu'ajouter à la réponse de Selvamani P.
Vous devrez peut-être également modifier les
SET NAMES utf8
requêtes avecSET NAMES utf8mb4
. Cela a fait l'affaire pour moi.En outre, c'est un excellent article pour porter votre site Web de utf8 à utf8mb4. En particulier, l'article fait 2 bons points sur les index et la réparation des tables après les avoir convertis en utf8mb4:
LES INDICES
TABLES DE RÉPARATION
En savoir plus sur les requêtes pour réparer les tables dans l'article.
la source
REPAIR TABLE
etOPTIMIZE TABLE
devrait être inutile -ALTER
a pour effet de les faire.Le point principal n'a pas été mentionné dans les réponses ci-dessus:
Nous devons passer la chaîne de requête avec les options
"useUnicode=yes"
et la"characterEncoding=UTF-8"
chaîne de connexionQuelque chose comme ça
la source
Eh bien, vous n'avez pas besoin de changer le jeu de caractères Whole DB. Au lieu de cela, vous pouvez le faire en changeant la colonne en type blob .
ALTER TABLE messages MODIFY content BLOB;
la source
J'ai une bonne solution pour gagner du temps. Je rencontre également le même problème mais je n'ai pas pu résoudre ce problème par la première réponse.
Votre personnage par défaut est utf-8. Mais emoji a besoin de utf8mb4 pour le supporter. Si vous avez l'autorisation de réviser le fichier de configuration de mysql, vous pouvez suivre cette étape.
Par conséquent, procédez comme suit pour mettre à niveau votre jeu de caractères (de utf-8 à utf8mb4).
étape 1. ouvrez votre my.cnf pour mysql, ajoutez ces lignes suivantes à votre my.cnf.
étape 2. arrêtez votre service mysql et démarrez le service mysql
Fini! Ensuite, vous pouvez vérifier que votre personnage est changé en utf8mb4.
la source
Prise en charge des emojis pour les applications ayant une pile technologique - mysql, java, springboot, hibernate
Appliquez ci-dessous les modifications dans mysql pour la prise en charge d'unicode.
ALTER DATABASE <database-name> CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
ALTER TABLE <table-name> CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Connexion à la base de données - Modification de l'URL jdbc:
jdbc:mysql://localhost:3306/<database-name>?useUnicode=yes&characterEncoding=UTF-8
Remarque - Si l'étape ci-dessus ne fonctionne pas, veuillez mettre à jour la version du connecteur mysql vers la version 8.0.15. (mysql 5.7 fonctionne avec la version 8.0.15 du connecteur pour le support Unicode)
la source
La solution la plus simple qui fonctionne pour moi est de stocker les données sous json_encode .
plus tard, lorsque vous récupérez, assurez-vous simplement de le json_decode .
Ici, vous n'avez pas à modifier le classement ou le jeu de caractères de la base de données et de la table.
la source
Pour quiconque essaie de résoudre ce problème sur une instance MySQL gérée (dans mon cas sur AWS RDS), le moyen le plus simple était de modifier le groupe de paramètres et de définir le jeu de caractères du serveur et le classement sur
utf8mb4
etutf8mb4_bin
, respectivement. Après le redémarrage du serveur, une requête rapide vérifie les paramètres des bases de données système et de celles nouvellement créées:la source