PDO + MySQL と壊れた UTF-8 エンコーディング [重複] 質問する

PDO + MySQL と壊れた UTF-8 エンコーディング [重複] 質問する

PHP で MySQL データベースと共に PDO ライブラリを使用していますが、アラビア語の単語のように UTF-8 でエンコードされたデータを挿入すると、データベースに挿入されますが、?????????.

私のフレームワークでは、PDO 接続を作成した後、SET NAMES utf8と の2 つのクエリを送信しますSET CHARACTER SET utf8。それでもまだ機能しません。

例:

loadclass('PDO', array(
    sprintf(
        'mysql:host=%s;port=%s;dbname=%s',
        confitem('database', 'host'),
        confitem('database', 'port'),
        confitem('database', 'name')
    ),
    confitem('database', 'username'),
    confitem('database', 'password'),
    array('PDO::ATTR_PERSISTENT' => confitem('database', 'pconnect'))
));
$this->query('SET NAMES ' . confitem('database', 'charset'));
$this->query('SET CHARACTER SET ' . confitem('database', 'charset'));

回避策:json_encode関数を使用してデータをデータベースに挿入する前に変換し、json_decode取得後に を使用してデコードします。これが私が現在行っている方法です。

ベストアンサー1

警告:この回答は PHP 5.3.5 以前に適用されます。PHP バージョン 5.3.6 (2011 年 3 月リリース) 以降では使用しないでください。

と比べてパレックの答えここ


使用:

$pdo = new PDO( 
    'mysql:host=hostname;dbname=defaultDbName', 
    'username', 
    'password', 
    array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8") 
); 

PDO 接続で UTF-8 を強制します。私の場合はうまくいきました。

おすすめ記事