编码问题 1 mysql 之前设置的是utf8 现在改成gbk2 页面是head 设置的是gbk 3 在editplus中显示文件格式是ansi但发送的数据库中是乱的 像这样 “閲嶅簡甯”。怎么回事? 怎么解决? 求解答 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 操作数据库前先来个 SET NAMES 这个是有的哦 set Names 'GBK'所有才纳闷 啊 表是不是gbk的哦。确定一下。最好贴出你的代码看看。 这是表结构 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 ; 重庆帼 ???和 閲嶅簡甯 一样令人费解如果表原来是 utf8 的,现在改为 gbk 的。那么改之前的数据依然是 utf8 的,不会改变set Names 'GBK'改成 set names gbk 看看,假如大小写敏感呢?set names gbk 的意义在于:通知 mysql 之后用 gbk 交谈这与数据表的现用语言集没有关系(当然两者间要能相互转换)如果仍然不能解决,可以贴出乱码内容的 base64 编码比如读取的乱码数据在 $row['area_pname'] 中,则echo base64_encode($row['area_pname']);贴出结果 我试了下 set names gbk 不管用实在是搞蒙了echo base64_encode($rowd['area_pname']); 的结果是 6YeN5bqG5bg=我上面的表中只有 area_panem字段是 gbk_bin其余是gbk_chinese_ci 会不会影响呢 不好意,没看仔细。原来是 `area_pname` varchar(20) COLLATE gbk_bin NOT NULL COMMENT '父属区',那么这是按二进制方式存储的,字符集对他不起作用你要么改成 gbk_chinese_ci,要么自己转码 改过了 我忘了 其实以前就是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 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 的就可以了 哈哈 非常感谢你耐心的解答 原来我主要的问题是找不准是什么编码,而且还忽略了个问题 在把数据添加的数据库中时用的是没转换的数据所有一值是错的 真是太傻了谢谢你 很强大 在论坛经常看到你啊 你是csdn的人么 我的几个帖子都有你的身影 关于txt文件导入数据库编码的问题 OB_start 缓存输出后为乱码 急请教SESSION问题 传值,简单问题 急,php如何接受 html的索引值 请问怎么屏蔽掉输入筐中的程序代码 -----这样过滤后,SQL还注入的了么? (请注入高手指正) ----- 请教:如何读去一张网页中所有的图片连接,然后把图片保存到一个文件夹中?? 怎样获得vbb的cookie中的密码,本机 关于thinkphp 3.2.3 nginx U方法的问题求助 Ajax在火狐浏览器中的兼容问题,程序在IE中运行正常 PHP解析.Net的webservice返回的dataset
所有才纳闷 啊
`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 ;
和 閲嶅簡甯 一样令人费解如果表原来是 utf8 的,现在改为 gbk 的。那么改之前的数据依然是 utf8 的,不会改变set Names 'GBK'
改成 set names gbk 看看,假如大小写敏感呢?set names gbk 的意义在于:通知 mysql 之后用 gbk 交谈
这与数据表的现用语言集没有关系(当然两者间要能相互转换)如果仍然不能解决,可以贴出乱码内容的 base64 编码
比如读取的乱码数据在 $row['area_pname'] 中,则
echo base64_encode($row['area_pname']);
贴出结果
echo base64_encode($rowd['area_pname']); 的结果是 6YeN5bqG5bg=我上面的表中只有 area_panem字段是 gbk_bin
其余是gbk_chinese_ci 会不会影响呢
`area_pname` varchar(20) COLLATE gbk_bin NOT NULL COMMENT '父属区',
那么这是按二进制方式存储的,字符集对他不起作用你要么改成 gbk_chinese_ci,要么自己转码
这条语句判断的 得到的是 ASCII$b=mb_convert_encoding($_POST,"GB2312",$a);
$c=mb_detect_encoding($_POST, array('ASCII','GB2312','GBK','UTF-8','BIG5'));
得到的还是 ASCII
所以又推出了 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 的就可以了
哈哈 非常感谢你耐心的解答 原来我主要的问题是找不准是什么编码,
而且还忽略了个问题 在把数据添加的数据库中时用的是没转换的数据所有一值是错的 真是太傻了
谢谢你 很强大 在论坛经常看到你啊 你是csdn的人么 我的几个帖子都有你的身影