首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PDO + MySQL和破解的UTF8编码

PDO + MySQL和破解的UTF8编码
EN

Stack Overflow用户
提问于 2010-12-18 07:05:30
回答 4查看 72.1K关注 0票数 39

我在PHP中将PDO库与MySQL数据库一起使用,但是如果我插入任何以UTF-8编码的数据,比如阿拉伯单词,它就会被插入到数据库中,但格式是?????????

在我自己的框架中,在创建PDO连接之后,我发送两个查询- SET NAMES utf8SET CHARACTER SET utf8。它还是不能工作。

示例:

代码语言:javascript
复制
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对其进行解码。我现在就是这么做的。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-08-12 01:53:19

警告:此答案适用于PHP5.3.5及更低版本。请勿将其用于PHP 5.3.6版(2011年3月发布)或更高版本。

请比较Palec's answer

使用:

代码语言:javascript
复制
$pdo = new PDO( 
    'mysql:host=hostname;dbname=defaultDbName', 
    'username', 
    'password', 
    array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8") 
); 

它强制在PDO连接上使用UTF-8。这对我很管用。

票数 143
EN

Stack Overflow用户

发布于 2014-01-27 13:44:18

您必须为连接设置正确的字符集。Add the charset=utf8 option to the DSN (这是MySQL特有的!)

代码语言:javascript
复制
$pdo = new PDO(
    'mysql:host=hostname;dbname=defaultDbName;charset=utf8',
    'username',
    'password'
);

但是,在PHP5.3.6之前的版本(2011年3月发布)中,您必须使用变通方法,因为不支持DSN中的charset选项。

代码语言:javascript
复制
$pdo = new PDO(
    'mysql:host=hostname;dbname=defaultDbName',
    'username',
    'password',
    array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")
);
票数 66
EN

Stack Overflow用户

发布于 2016-05-14 01:21:43

所有尝试,如:

代码语言:javascript
复制
PDO::MYSQL_ATTR_INIT_COMMAND =>"SET NAMES 'utf8mb4' COLLATE 'utf8mb4_unicode_ci' "

代码语言:javascript
复制
$this->connection = new PDO('mysql:host='.DBHOST.';dbname='.DBNAME.';charset=utf8', DBUSER, DBPASS, self::$opt);

代码语言:javascript
复制
$this->connection->exec("set names utf8");

仍然生成了无法读取的文本乱码。

在我的例子中,问题的原因是:在将数据插入数据库之前使用了htmlentities西里尔文字母被完全销毁。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4475548

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档