php连MySQL数据库编码问题

我的数据库类型为gbk。
下面是连接数据库的php代码,现在读取和写入数据库都有乱码。
请教怎么改成支持gbk。

class MyDB{
var $conn;
function MyDB(){}
function connect($host,$username,$pwd,$port="3306"){
if(!$port)$port=3306;
$this->conn=mysql_connect("$host:$port",$username,$pwd);
return $this->conn;
}
function close(){
mysql_close($this->conn);
}
function query($sql){
$ResultSet=mysql_query($sql,$this->conn) or die($sql.mysql_error());
return $ResultSet;
}
function fetch_array($ResultSet){
return mysql_fetch_array($ResultSet);
}
function fetch_row($ResultSet){
return mysql_fetch_row($ResultSet);
}
function fetch_object($ResultSet){
return mysql_fetch_object($ResultSet);
}
function insert_id(){
return mysql_insert_id($this->conn);
}
function affected_rows(){
return mysql_affected_rows($this->conn);
}
function fetch_field($ResultSet,$index=""){
if($index=="")return mysql_fetch_field($ResultSet);
else return mysql_fetch_field($ResultSet,$index);
}
function result($ResultSet,$rowIndex,$columnIndex){
return mysql_result($ResultSet,$rowIndex,$columnIndex);
}
function num_rows($ResultSet){
return mysql_num_rows($ResultSet);
}
function num_fields($ResultSet){
return mysql_num_fields($ResultSet);
}
function select_db($db_name){
return mysql_select_db($db_name,$this->conn);
}
function list_tables($db_name){
return mysql_list_tables($db_name);
}
function tablename($ResultSet,$index){
return mysql_tablename ($ResultSet,$index);
}
function list_dbs(){
return mysql_list_dbs($this->conn);
}
function getdata($sql){
$rs = $this->query($sql);
return $this->fetch_array($rs);
}

function getdataobj($sql){
$rs = $this->query($sql);
return $this->fetch_object($rs);
}
}

也许是数据库的问题,我也遇到过,我用的是wampserver,界面的工具,直接点鼠标就可能建成mysql数据库,建成后导入数据,查询数据库返回面而的是乱码,我遇到的情况是这样的:

1、建库用gbk,如图。

2、导入表及数据时,默认是utf,此处要改成gbk就不是乱码了,如第图底页面,如果是默认的或是其它的字符集,能导入成功但是乱码。另外直接把sql粘贴到sql窗口,也不是乱码。

希望能帮到你,呵呵~

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-07-13
'DB_CHARSET'=>'UTF-8',// 数据库编码默认采用utf8
改为
'DB_CHARSET'=>'utf8',// 数据库编码默认采用utf8

PHP的数据库编码是utf8
第2个回答  2015-10-10
可以使用 mysql_query("set names 'utf8'"); 语句来设置要使用的数据编码,它的意思是数据使用utf8编码;
语法说明如下:

SET NAMES 'charset_name'

SET NAMES显示客户端发送的SQL语句中使用什么字符集。
charset_name 要使用的字符集

例如:
$con = mysql_connect(DB_SERVER, DB_SERVER_USERNAME, DB_SERVER_PASSWORD) or die('can not connect server!'); //连接数据库

mysql_select_db(DB_DATABASE); //选择数据库

mysql_query("set names 'utf8'"); //设置要使用的字符集
第3个回答  2011-07-12
应该不是数据库连接的问题.
在你的程序中头上加载这么一句:
header("Content-type: text/html; charset=GB2312");
一般会解决此问题.追问

加上去没用哦。

http://bbs.php100.com/read-htm-tid-90559.html

详细的问题在这里。

追答

1,用Navicat 等MYSQL数据库连接工具手工查阅一下数据库内容是否是乱码(注意数据库连接时选择你认为的正确的编码格式).如果以gbk连接查询出来的结果能够正常显示,那说明数据库中的编码没有问题.
第2步,你写一个简单的php读取数据库的语句,然后用die(print_r($rs,true));看看读出来的记录集数据是否正确,如果不正确,如果从IE中切换编码格式是否会显示正确(鼠标右键,更换编码).一般这地方能过更换编码就会正确显示,然后在你的数据库连接类里面更改你的编码类型为你刚才选择的编码类型,并在在你的页面输出前加上header("Content-type: text/html; charset=编码类型");一般会解决问题.
如果还是解决不了,请注意网页中是否有Meta content-type 为utf8之类的定义,这可能导致你编码不统一.

第4个回答  2011-07-13
function connect($host,$username,$pwd,$port="3306"){
if(!$port)$port=3306;
$this->conn=mysql_connect("$host:$port",$username,$pwd);
mysql_query("SET NAMES 'GBK'");
return $this->conn;
}
试试这样行不行
相似回答