J'ai converti ma base de données mysql 5.7 en utf8mb4 aujourd'hui.Le site PHP/mysql utilisant utf8mb4 ne récupérera pas correctement les emojis de la base de données, bien que utf8mb4 soit spécifié partout où je peux trouver
Comme test, j'ai mis un emoji() dans un champ, en utilisant Navicat.
Il s'affiche très bien dans Navicat, même si je quitte et rouvre le programme.
Le problème vient quand je le récupère en utilisant PDO dans mon script et que je le renvoie au navigateur; Je reçois (6 questions noires en diagonale).
Si je copie le caractère directement dans mon script et l'écho, cela fonctionne.
Donc, ce n'est pas un problème avec mysql.
Ce n'est pas un problème avec la police.
Ce n'est pas un problème avec mon navigateur.
Ce n'est pas un problème avec l'écho php.
Alors ... c'est un problème avec PDO?
Ceci est mon code AOP:
$PDO = new PDO('mysql:host='.DB_SERVER.';dbname='.DB_NAME.';charset=utf8mb4', DB_USER, DB_PASSWORD, [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false
]);
$PDO->query("SET NAMES 'utf8mb4' COLLATE 'utf8mb4_unicode_ci'");
$rs = $PDO->query("SELECT name FROM users WHERE id = 1000"); // name has been set to
while ($a = $rs->fetch()) {
print_r($a);
}
Si je vérifie la sortie de SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';
en php dans le navigateur chaque sortie est correctement utf8mb4
/utf8mb4_unicode_ci
(en dehors de character_set_system
qui est tout simplement utf8
, mais je pense que c'est normal ?)
Quoi d'autre pourrait-il être?
Merci. J'ai ajouté cela à ma [longue liste de questions charset] (http://mysql.rjweb.org/doc.php/charcoll#other_computer_languages) avec un logiciel tiers. –