我在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对其进行解码。我现在就是这么做的。
发布于 2011-08-12 01:53:19
警告:此答案适用于PHP5.3.5及更低版本。请勿将其用于PHP 5.3.6版(2011年3月发布)或更高版本。
请比较Palec's answer 。
使用:
$pdo = new PDO(
'mysql:host=hostname;dbname=defaultDbName',
'username',
'password',
array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")
); 它强制在PDO连接上使用UTF-8。这对我很管用。
发布于 2014-01-27 13:44:18
您必须为连接设置正确的字符集。Add the charset=utf8 option to the DSN (这是MySQL特有的!)
$pdo = new PDO(
'mysql:host=hostname;dbname=defaultDbName;charset=utf8',
'username',
'password'
);但是,在PHP5.3.6之前的版本(2011年3月发布)中,您必须使用变通方法,因为不支持DSN中的charset选项。
$pdo = new PDO(
'mysql:host=hostname;dbname=defaultDbName',
'username',
'password',
array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")
);发布于 2016-05-14 01:21:43
所有尝试,如:
PDO::MYSQL_ATTR_INIT_COMMAND =>"SET NAMES 'utf8mb4' COLLATE 'utf8mb4_unicode_ci' "或
$this->connection = new PDO('mysql:host='.DBHOST.';dbname='.DBNAME.';charset=utf8', DBUSER, DBPASS, self::$opt);或
$this->connection->exec("set names utf8");仍然生成了无法读取的文本乱码。
在我的例子中,问题的原因是:在将数据插入数据库之前使用了htmlentities。西里尔文字母被完全销毁。
https://stackoverflow.com/questions/4475548
复制相似问题