最近写程序,朋友推荐使用ADODB进行数据库连接,速度快,支持数据库种类很多,功能也很强大,使用一下觉得很不错。我程序使用Extjs,数据库PostgresQL,字符集使用的是utf-8,ADODB没有做任何改动就使用上了,很不错。
有另外一个项目,也使用Extjs,数据库使用MySQL5,我把数据库连接也改成了ADODB,但是问题出现了,中文显示的都是???,检查数据库的字符集,Apache的字符集,PHP的字符集都是utf-8的,不知道问题出在了什么地方,把ADODB的源码也读了一遍,也没有找到。
最后在网上看到了很多朋友都遇到了这样的问题,也提了不少的解决方法,试过后都不行,最后看到了关于Mysql的字符设置的资料,于是修改了ADODB中mydql驱动的代码,解决了问题,先把具体的方法同大家共享一下:
找到ADODB中的drivers目录下的adodb-mysql.inc.php文件,修改其中的 _connect和 _pconnect两个函数,各增加以下代码:+ @mysql_query("SET NAMES 'utf8'", $this->_connectionID);即可,位置在SelectDB一行之前。
function _connect($argHostname, $argUsername, $argPassword, $argDatabasename) { if (!empty($this->port)) $argHostname .= ":".$this->port; if (ADODB_PHPVER >= 0x4300) $this->_connectionID = mysql_connect($argHostname,$argUsername,$argPassword, $this->forceNewConnect,$this->clientFlags); else if (ADODB_PHPVER >= 0x4200) $this->_connectionID = mysql_connect($argHostname,$argUsername,$argPassword, $this->forceNewConnect); else $this->_connectionID = mysql_connect($argHostname,$argUsername,$argPassword); if ($this->_connectionID === false) return false; + @mysql_query("SET NAMES 'utf8'", $this->_connectionID); if ($argDatabasename) return $this->SelectDB($argDatabasename); return true; }
|
function _pconnect($argHostname, $argUsername, $argPassword, $argDatabasename) { if (!empty($this->port)) $argHostname .= ":".$this->port; if (ADODB_PHPVER >= 0x4300) $this->_connectionID = mysql_pconnect($argHostname,$argUsername,$argPassword,$this->clientFlags); else $this->_connectionID = mysql_pconnect($argHostname,$argUsername,$argPassword); if ($this->_connectionID === false) return false; if ($this->autoRollback) $this->RollbackTrans(); + @mysql_query("SET NAMES 'utf8'", $this->_connectionID); if ($argDatabasename) return $this->SelectDB($argDatabasename); return true; }
|
阅读(2211) | 评论(0) | 转发(0) |