2016-10-11 1 views
0

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であるが、私はそれは普通のことだと思います?)

ほかに何がありますか?

答えて

0

問題はNavicatの古いバージョンでした。 8から11へのアップグレードは私の問題を修正しました。 PHPを使って挿入されたemojisが正しく格納され、PHPで取得されたが、Navicatでは正しく表示されないことが判明したとき、これがおそらく原因であることに気付きました。

同様に反対です。 Navicatで設定されたemojisは、Navicatで正しく保存され、PHPでは検索されません。

navicat接続のエンコードオプションを見ると、「use mysql encoding」というチェックボックスがありますが、チェックを外すとutf8mb4ではなくutf8のみのドロップダウンが可能です。私はnavicat 8 pre-datesが一般的に使用されていると思います。

すばやくアップグレードし、すべてが完全に機能します。

+0

ありがとうございました。私はサードパーティ製のソフトウェアを使って、[charset issueの長いリスト](http://mysql.rjweb.org/doc.php/charcoll#other_computer_languages)に追加しました。 –

関連する問題