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 を強制します。私の場合はうまくいきました。