我在 PHP 中将 PDO 库与 MySQL 数据库一起使用,但如果我插入任何以 UTF-8 编码的数据,例如阿拉伯语单词,它就会插入到数据库中,但会以 ?????????
的形式插入。
在我自己的框架中,创建 PDO 连接后,我发送了两个查询 – SET NAMES utf8
和 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
解码。这就是我现在的做法。
原文由 Jason4Ever 发布,翻译遵循 CC BY-SA 4.0 许可协议
利用:
它在 PDO 连接上强制使用 UTF-8。它对我有用。