2017-10-09 4 views
-6

J'essaie de sauvegarder le symbole emoji dans l'enregistrement de la base de données, mais chaque fois il ne sauvegarde pas correctement. J'ai référé ce How to store Emoji Character in My SQL Database mais ne fonctionne toujours pas.
Comme pour la solution sur la question ci-dessus, j'ai essayé de changer le jeu de caractères de utf8 à utf8mb4 et de collation de utf8mb4_bin.

J'ai tout essayé, comme la réinitialisation par défaut, puis le changement dans la table de la base de données. J'ai essayé utf8mb4_unicode_ci, utf8_unicode_ci et utf8mb4_bin mais ça ne marche pas. J'utilise MySQL version 5.6. Et je suis en train de changer la collation avec ci-dessous requête
Emoji character() ne fonctionne pas avec utf8mb4_bin dans MySQL version 5.6

alter table `users` convert to character set utf8mb4 collate utf8mb4_bin; 

Le code ci-dessus fonctionne bien, il change le type UTF dans la base de données. Mais emoji ne sauve pas correctement, il économise des points d'interrogation (????)

ci-dessous est ma structure de table base de données exemple:

CREATE TABLE IF NOT EXISTS `users` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'System generated id used for uniqueness', 
    `introduction` longtext COLLATE utf8mb4_bin, 
    `other_details` longtext COLLATE utf8mb4_bin,  
    PRIMARY KEY (`id`), 
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin AUTO_INCREMENT=41213 ; 


Pour enregistrer emoji en utilisant ci-dessous le code PHP:

$dom = new DOMDocument('1.0', 'UTF-8'); 
$strWithEmoji = ""; 
$fullContent = '<meta http-equiv="content-type" content="text/html; charset=utf-8">' 
       + $strWithEmoji; 
$this->save($fullContent); // Function for saving into database 


Je ne sais pas exactement ho w beaucoup d'octets sont stockés mais j'essaye de sauver seulement ce caractère d'emoji "" et il stocke comme 4 points d'interrogation (????).

J'ai essayé toutes les solutions de liens ci-dessous, mais il n'a pas fonctionné pour moi:
How to store Emoji Character in My SQL Database
UTF-8 all the way through
The ultimate emoji encoding scheme

+0

@Liam J'ai essayé toutes les solutions déjà demandées, mais cela ne fonctionne pas – KRY

+1

Vous n'avez pratiquement rien ajouté à votre question d'origine il y a 2 jours. S'il vous plaît ne posez pas la même question plusieurs fois. Ça ne marche pas, ce n'est pas une question. – Liam

+0

@Liam La question est supprimée – KRY

Répondre

3

La connexion doit spécifier utf8mb4 à MySQL. Que sous les couvertures dans DOMDocument?

est hexadécimal F09F9880, qui devrait fonctionner dans une colonne de CHARACTER SET utf8mb4 avec tout utf8mb4_* classement.

Et voici un autre lien: Trouble with UTF-8 characters; what I see is not what I stored

Si tout le reste échoue, exécutez SET NAMES utf8mb4 de PHP après avoir établi une connexion.