1   mysql 之前设置的是utf8 现在改成gbk
2   页面是head 设置的是gbk 
3   在editplus中显示文件格式是ansi但发送的数据库中是乱的 像这样  “閲嶅簡甯”。怎么回事? 怎么解决? 求解答 

解决方案 »

  1.   

    操作数据库前先来个 SET NAMES
      

  2.   

    这个是有的哦 set Names 'GBK'
    所有才纳闷 啊
      

  3.   

    表是不是gbk的哦。确定一下。最好贴出你的代码看看。
      

  4.   

    这是表结构  area_pname为被写入的中文CREATE TABLE `tbl_cb_demo` (
      `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
      `uid` int(11) NOT NULL COMMENT '用户ID',
      `start_date` date NOT NULL COMMENT '任务开始时间',
      `stop_date` date NOT NULL COMMENT '任务结束时间',
      `tree_channel_id` varchar(10) CHARACTER SET gbk NOT NULL COMMENT '渠道ID(对应tree_channel.id)',
      `value` varchar(10) CHARACTER SET gbk NOT NULL COMMENT '任务量',
      `dict_shop_id` int(11) NOT NULL COMMENT '店面ID(对应dict_shop.id)',
      `upload_type` varchar(4) CHARACTER SET gbk NOT NULL COMMENT '导入信息类别:如fqnb分区NB;fqdt分区DT;fqpad分区乐pad;qdnb渠道经理NB,cdnb城代NB,mdnb门店NB 等',
      `staff_type` int(11) NOT NULL COMMENT '用户类别关联tree_staff_type的id',
      `pid` int(11) NOT NULL COMMENT '直接上级领导',
      `area_pname` varchar(20) COLLATE gbk_bin NOT NULL COMMENT '父属区',
      `status` int(4) NOT NULL DEFAULT '2' COMMENT '标记任务分配状态1为成功2为失败',
      PRIMARY KEY (`id`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=gbk COLLATE=gbk_bin AUTO_INCREMENT=252 ;
      

  5.   

    重庆帼 ???
    和 閲嶅簡甯 一样令人费解如果表原来是 utf8 的,现在改为 gbk 的。那么改之前的数据依然是 utf8 的,不会改变set Names 'GBK'
    改成 set names gbk 看看,假如大小写敏感呢?set names gbk 的意义在于:通知 mysql 之后用 gbk 交谈
    这与数据表的现用语言集没有关系(当然两者间要能相互转换)如果仍然不能解决,可以贴出乱码内容的 base64 编码
    比如读取的乱码数据在 $row['area_pname'] 中,则
    echo base64_encode($row['area_pname']);
    贴出结果
      

  6.   

    我试了下 set names gbk 不管用实在是搞蒙了
    echo base64_encode($rowd['area_pname']); 的结果是    6YeN5bqG5bg=我上面的表中只有 area_panem字段是 gbk_bin
    其余是gbk_chinese_ci 会不会影响呢
      

  7.   

    不好意,没看仔细。原来是
      `area_pname` varchar(20) COLLATE gbk_bin NOT NULL COMMENT '父属区',
    那么这是按二进制方式存储的,字符集对他不起作用你要么改成 gbk_chinese_ci,要么自己转码
      

  8.   

    改过了 我忘了 其实以前就是gbk_chinese_ci 也是这个结果,然后我就改成gbk_bin试了试$a=mb_detect_encoding($_POST, array('ASCII','GB2312','GBK','UTF-8','BIG5'));
    这条语句判断的 得到的是 ASCII$b=mb_convert_encoding($_POST,"GB2312",$a);
    $c=mb_detect_encoding($_POST, array('ASCII','GB2312','GBK','UTF-8','BIG5'));
    得到的还是 ASCII
      

  9.   

    mb_detect_encoding 这个函数存在误判的问题
    所以又推出了 mb_check_encoding 函数
    使用
    if(mb_check_encoding($str, 'gbk')) echo 'gbk';
    elseif(mb_check_encoding($str, 'big5')) echo 'big5';
    elseif(mb_check_encoding($str, 'utf-8')) echo 'utf-8';通常不是 gbk 的就是 utf-8 的
    所以只需判断是否 utf-8 的就可以了 
      

  10.   


    哈哈 非常感谢你耐心的解答  原来我主要的问题是找不准是什么编码,
    而且还忽略了个问题 在把数据添加的数据库中时用的是没转换的数据所有一值是错的 真是太傻了
    谢谢你  很强大 在论坛经常看到你啊 你是csdn的人么 我的几个帖子都有你的身影