mysql 5.7データベースをutf8mb4に変換しました。utf8mb4を使用しているPHP/mysqlサイトでは、utf8mb4が指定されているにもかかわらず、データベースからemojisを正しく取得できません。
テストとして、Navicatを使用して、フィールドにpoo emoji()を挿入しました。
Navicatでは、プログラムを終了して再度開いても表示されます。
問題は、スクリプトでPDOを使用して取得し、ブラウザにエコーしたときに発生します。私は (黒い疑問符6つ)を得ます。
文字をスクリプトに直接コピーしてエコーすると、動作します。
したがって、mysqlでは問題ありません。
フォントに問題はありません。
私のブラウザで問題はありません。
これはPHPのエコーには問題ありません。
PDOには問題がありますか?
これは私のPDOコードです:私は、ブラウザでPHPのSHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';
の出力をチェックすると、すべての出力がutf8mb4
/utf8mb4_unicode_ci
正確である
$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);
}
(離れcharacter_set_system
から単にutf8
であるが、私はそれは普通のことだと思います?)
ほかに何がありますか?
ありがとうございました。私はサードパーティ製のソフトウェアを使って、[charset issueの長いリスト](http://mysql.rjweb.org/doc.php/charcoll#other_computer_languages)に追加しました。 –