一尘不染

PDO + MySQL和损坏的UTF-8编码

mysql

我将PDO库与PHP中的MySQL数据库一起使用,但是如果我插入任何以UTF-8编码的数据(如阿拉伯文字),则会将其插入数据库中,但是为?????????

在我自己的框架中,创建PDO连接后,我发送两个查询– SET NAMES utf8SET 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在提取后用于解码。这就是我现在的做法。


阅读 253

收藏
2020-05-17

共1个答案

一尘不染

采用:

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

它在PDO连接上强制使用UTF-8。它为我工作。

2020-05-17