【踩坑+实践】关于CI+PHP+sqlserver2008r2查询数据乱码的问题

3 篇文章 0 订阅
1 篇文章 0 订阅

目录

 

描述

过程

解决办法


描述

CI+PHP从sqlserver取回的数据乱码,取回的数据,中文正常,但是中文之间总是会夹杂几个问好,数字、英文正常;

 

过程

整个过程,折腾了一天,可累死我了。

页面乱码,首先把数据库的查询结果和网页显示的结果对比一下,反反复复对比了好几次,数据库的结果都是没有问题的,数据库没问题,页面有问题,第一反应是这中间传输的时候有问题。

但是还是以为是页面乱码的问题,查询过上百条答案,广大网友的答案出奇的一致,于是我把编码改成utf-8,我在php中添加了一行代码

header("Content-type:text/html;charset=utf-8");

然并卵,页面还是乱码,是不是姿势不对???于是我在页面头部head标签里面又添加了一次

<meta charset="utf-8">

可是,还是没有反应。

是不是utf不对???于是又轰轰烈烈的把网页、php配置文件改成gbk、gb2312,都不好使,乱码反而更严重了;不止数据乱码,整个网页全是问号。艾玛,可气死我了;

 

又有网友提到,查一下数据库数据的编码,代码如下:

数据库新建查询:

SELECT  COLLATIONPROPERTY('Chinese_PRC_Stroke_CI_AI_KS_WS', 'CodePage')

运行后的结果参考以下:

936 简体中文GBK 
950 繁体中文BIG5 
437 美国/加拿大英语 
932 日文 
949 韩文 
866 俄文 
65001 unicode UFT-8

我的显示936,也就是我的数据库是gbk编码,于是,“灵感”来了,又轰轰烈烈的改网页编码,折腾了好一会儿,以失败告终。

我想,既然网页的改变不了,我就改数据库,这是下下策,但是我编程急需一些“正常”的数据,反正我运行的本地数据库,数据库都在本地,没啥大的影响,上线的时候,再处理编码的问题。结果,还是没有成功;

 

解决办法

天色渐晚,快到下班时间了,回想一整天踩过的坑,又回到最初的问题,数据库没有问题,页面的数据有问题,应该是数据传输中间件的原因。又查了一会儿,终于找到一篇文章,解决了我的问题,方法如下:

CI目录: system/database/drivers/sqlsrv/sqlsrv_driver.php

public function __construct($params)
	{
		parent::__construct($params);

		if ($this->scrollable === NULL)
		{
			$this->scrollable = defined('SQLSRV_CURSOR_CLIENT_BUFFERED')
//				? SQLSRV_CURSOR_CLIENT_BUFFERED//这句是框架默认的[删除]
? SQLSRV_CURSOR_STATIC//这句是我添加的[添加]
				: FALSE;
		}
	}

修改以后,问题就解决了

当时看到sqlsrv这个单词的时候,我就知道是什么回事了,因为在配置sqlserver数据库的时候,sqlsrv是php的数据库驱动dbdriver,既然取回来的是数据有问题,那肯定跟这个有关;至于问什么要按照上面这个方法这么改?我也不知道,原文作者的回答也很简单干脆:具体原因不明;

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值