用户
 找回密码
 入住 CI 中国社区
搜索
12
返回列表 发新帖
楼主: chunlei85
收起左侧

CI连MSSQL乱码问题求助

[复制链接]
发表于 2009-4-30 23:56:44 | 显示全部楼层
说到mssql就气死我,我在windowsxp+iis5里运行mssql的网站,刷新页面10次有5次乱码,在windows2003+iis6就没问题
发表于 2009-5-1 00:07:03 | 显示全部楼层
应该不至于吧...文件格式/html meta/web header/output charset 四个东西一致应该没什么问题~~
发表于 2009-5-1 09:19:54 | 显示全部楼层
确保所有项目文件都是相同编码,这样输出才不会出现乱码

可能你的项目有些文件是其他编码,例如中文系统默认的gbk(codepage 936)

如果在gbk里面echo $somestring到utf8页面,很可能出现乱码
 楼主| 发表于 2009-5-15 14:18:24 | 显示全部楼层
呵呵!12楼、13楼的兄弟,可能你们没有亲身试用过连MSSQL。
编码一致的问题,我是明白的。之前,我所有的编码都是UTF-8的,可就是MSSQL数据库的编码你是调整不了的,因为,MSSQL server 只支持GBK或GB2312(这个hex在前面也说过的)
所以老是到最后,要么插入到MSSQL数据库是乱码,要么从MSSQL数据库取出来数据显示到页面是乱码。
这中间就是少了(我认为:utf-8的中文数据在插入到MSSQL数据库时要转为GBK或GB2312的   另外   从MSSQL数据库取出来中文字(是GBK或GB2312的编码字)要转成UTF-8的编码字显示到页面)

目前,为了省去那么多转字符集的麻烦
我把我工程下所有文件都换成了GB2312的编码了(这也是将就MSSQL才这样做的)
这样问题就解决了!

我的建议是  codeigniter 应在以后版本里 在db_drivers里
如果DB驱动选择的是MSSQL 应该自动为我们用户 转一下

以下是codeigniter中mssql_driver.php,mysql_driver.php两个文件中db_set_charset方法(请大家自己对比)

mssql_driver.php:
        function db_set_charset($charset, $collation)
        {
                // @todo - add support if needed
                return TRUE;
        }


mysql_driver.php:
function db_set_charset($charset, $collation)
        {
                return @mysql_query("SET NAMES '".$this->escape_str($charset)."' COLLATE '".$this->escape_str($collation)."'", $this->conn_id);
        }
发表于 2009-5-15 16:44:03 | 显示全部楼层
呵呵!12楼、13楼的兄弟,可能你们没有亲身试用过连MSSQL。
编码一致的问题,我是明白的。之前,我所有的编码都是UTF-8的,可就是MSSQL数据库的编码你是调整不了的,因为,MSSQL server 只支持GBK或GB2312(这个hex ...
chunlei85 发表于 2009-5-15 14:18

开玩笑呢?你?
我几年前就开始用php+mssql开发网站了,就是因为mssql不支持utf-8,所以前面才告诉你,所有页面都要gbk化才不出错,你都没理解我的意思

这个站我是用php+mssql写的,无乱码http://www.wdi8.com
 楼主| 发表于 2009-5-18 13:23:06 | 显示全部楼层
兄弟 visvoy ,
其实我的意思也是说:php+mssql开发,最好弄成GBK或GB2312的统一编码。
如果非有用UTF-8的编码,在跟MSSQL打交道的时候都要转一次,不像直接用GBK编码的方便。

本版积分规则