PDO连接数据库的中文乱码问题

今天在lamp环境下遇到一个非常严重的问题:在本地浏览器客户端中,从服务器数据库里查询出来的内容,只要是中文全都显示成问号 ‘?????‘。

让我十分疑惑,因为 mysql从数据库到数据表全都utf8_general_ci,网站文件php css js html 也全采用utf8编码,而且经过网上资料各种排查试验无果。

而且有一个奇怪的现象,就是:

“在客户端新插入的数据,存在数据库中是乱码的,但显示在客户端是不乱码。之前在本地(windows)开发测试时插入的数据,只要是中文,客户端统统显示问号。”

问题的原因就很明显了,这说明在存入数据时就出现了问题,并不是数据库自身的原因。mysql php apache中好像跟apache又没什么关系,所以问题肯定出在了php操作数据库的代码里!

我是采用pdo来操控数据库的,于是搜索了一下pdo怎样设置utf8编码,在php-pdo官方文档中,好像并没有提及,但是在 User Contributed Notes 中发现这么一段

<?php
//If you use the UTF-8 encoding, you have to use the fourth parameter : 

$db = new PDO(‘mysql:host=myhost;dbname=mydb‘, ‘login‘, ‘password‘, array(PDO::MYSQL_ATTR_INIT_COMMAND => ‘SET NAMES \‘UTF8\‘‘));
?>

在实例化PDO时,需要提供第四个参数,来设置编码。

array(PDO::MYSQL_ATTR_INIT_COMMAND => ‘SET NAMES \‘UTF8\‘‘)

再实验用php往数据库中插入数据,发现数据库中新插入的数据不再乱码了,并且客户端展示的数据库中文内容也不再显示问号,原来一切问题都出现在数据库和客户端中间的桥梁--PDO这里
时间: 2024-11-05 10:59:22

PDO连接数据库的中文乱码问题的相关文章

【转】php pdo连接数据库 解决中文乱码问题(wordpress mysql 问号?? ??)

原文链接:http://blog.csdn.net/ysydao/article/details/11002295 PHP 用pdo连接数据库时出现中文乱码问题解决办法 1.array(PDO::MYSQL_ATTR_INIT_COMMAND => "set names utf8"),在与数据库建立连接的时候的第四个参数   example:        $dbh = new PDO($dsn,$user,$pass,array(PDO::MYSQL_ATTR_INIT_COM

wamp环境,pdo方式连接数据库,中文乱码解决方案

作为一个脆弱的小精灵,采用了一种简陋的方式去连接数据库,相信多数人都是和我一样的连接方式————简陋的数据库连接方式: define('DB_HOST','your_host');define('DB_USER','your_username');define('DB_PWD','your_password');define('DB_CHARSET','utf-8');define('DB_DBNAME','your_db_name'); $pdoOb=new PDO('mysql:host='

JSP开发过程遇到的中文乱码问题及解决方案

JSP开发过程遇到的中文乱码问题及解决方案 来源:偶my耶的博客 发布时间:2015-03-31 阅读次数:543 8 对于程序猿来说,乱码问题真的很头疼,下面列举几种常见的乱码. 1.数据库编码不一致导致乱码 解决方法: 首先查看数据库编码,输入: show variables like "%char%"; 确认编码一致,如果不一致,可输入: SET character_set_client='utf8'; SET character_set_connection='utf8'; S

开发过程遇到的中文乱码问题

对于程序猿来说,乱码问题真的很头疼,下面列举几种常见的乱码. 1.数据库编码不一致导致乱码 解决方法: 首先查看数据库编码,输入: show variables like "%char%"; 确认编码一致,如果不一致,可输入: SET character_set_client='utf8'; SET character_set_connection='utf8'; SET character_set_results='utf8'; 也可设置成gbk编码; 也可以在安装Mysql目录下修

java项目连接数据库(oracle)中文乱码问题解决方法

今天写了一个java项目连接数据库,之后写了一个执行入库操作的模块.此时暴露出一个问题就是项目的中文插入到数据库时会是乱码: 项目输出的中文: 执行插入操作后数据库中内容: 此时CustomerNumber字段是乱码. 出现这种情况一般都是数据库编码与项目编码不一致导致的,首先查看项目与数据库的编码格式: 查看项目编码: 项目的编码是gbk格式 查看数据库编码格式: 数据库编码格式是ISO-8859-1 以上查看编码格式操作可以百度 出现这种情况一般可以通过两种方式解决.一是修改数据库或者项目的

PL/sql developer连接数据库的问题以及oracle数据库中文乱码的问题

今天第二次配置PL/sql developer,表示很蛋疼,昨天因为动了一个东西然后莫名其妙的就再也连接不了数据库,总是显示各种错误,我动的东西是因为中文会显示乱码,(因为我是用32位的PL/sql developer连接64位的orcale,所以参照网上的教程在添加了一个环境变量名字是NLS_LANG,值是SIMPLIFIED CHINESE_CHINA.ZHS16GBK,然后把注册表下面的这个名字的值也改成了这一样的,然后我再次登陆就显示各种错误了,连改回去都不行,还尝试过重新创建数据库,最

Brophp框架开发时连接数据库读取UTF8乱码的解决(转)

Brophp框架开发时连接数据库读取UTF8乱码的解决办法 (2012-09-15 10:41:22) 转载▼ 标签: 杂谈 it php 分类: 建站技术 Brophp框架开发时连接数据库读取UTF8乱码的解决用brophp框架读取数据库的时候发生乱码,数据库和源码都采用的utf-8编码,按理说不应该出现乱码的.仔细分析应该是出在数据连接时,后来看到一个高手的解答总算弄明白了.英文正常读取而中文乱码,基本上都是字符集的问题.要在PHP端发送set names utf8.声明和数据库握手的时候也

解决openfire在使用MySQL数据库后的中文乱码问题(转)

openfire是一个非常不错的IM服务器,而且是纯Java实现,具有多个平台的版本,他的数据存储可以采用多种数据库,如MySQL,Oracle等. 在实际使用时大家遇到最多的就是采用MySQL数据库后的中文乱码问题,这个问题十分有趣,而且从现象上可以看出openfire内部的一些机制. 实际问题是这样的:首先启动openfire服务器,然后利用客户端或直接登录到后台新建一个帐户,为该帐户指定一些中文的属性,如姓名等.如果不重启服务器,你永远不会觉得有什么不对的地方,因为所有的中文显示都是正常的

python向数据库插入中文乱码问题

这即将是一篇very short very short的博文,之所以发这篇博文主要是为了吐槽,表达我的气愤. 我靠,是个人都知道,编码问题遇上了是有多么恶心,就是很恶心很恶心很恶心就是了,对不对. 在python里,import MySQLdb后,向数据库插中文乱码的问题不是一次遇到. OK,就当我笨吧,我就是笨.曾几何时,python这边死皮赖脸地报错,曾几何时,sql那边雷打不动地显示乱码.姐能怎样,能怎样,还不是各种百度各种谷歌去撞.撞上了就撞上了,反正由于已经转晕了,也懒得记. 但是,今