用户
 找回密码
 入住 CI 中国社区
搜索
查看: 3709|回复: 5
收起左侧

[HELP] CI 连接oracle 字符乱码

[复制链接]
发表于 2011-5-24 11:03:44 | 显示全部楼层 |阅读模式
使用OCI8 连接没有乱码,
$conn=oci_connect("bi","bi.2010","bi","utf8")  ;

config.php设置如下:
$config['charset'] = 'UTF-8';

database.php设置如下:
$db['default']['hostname'] = '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.50)(PORT=1521))(CONNECT_DATA=(SID=bi)))';
$db['default']['username'] = 'bi';
$db['default']['password'] = 'bi.2010';
$db['default']['database'] = '';
$db['default']['dbdriver'] = 'oci8';
$db['default']['dbprefix'] = '';
$db['default']['pconnect'] = TRUE;
$db['default']['db_debug'] = TRUE;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = '';
$db['default']['char_set'] = 'utf8';
$db['default']['dbcollat'] = 'utf8_general_ci';
$db['default']['swap_pre'] = '';
$db['default']['autoinit'] = TRUE;
$db['default']['stricton'] = FALSE;

编辑环境 nodapad++
保存为 utf8 无bom方式

请问还有什么地方需要配置
发表于 2011-5-24 11:18:01 | 显示全部楼层
帮你查了一下,OCI连接方式需要设置环境变量NLS_LANG的,具体你可以搜一下。
另外我看了下CI 的oci8_driver.php
发现
PHP复制代码
 
/**
         * Set client character set
         *
         * @access      public
         * @param       string
         * @param       string
         * @return      resource
         */

        function db_set_charset($charset, $collation)
        {
                // @todo - add support if needed
                return TRUE;
        }
 
复制代码

这里只是实现了一个接口,直接返回的true,OCI方式可能不支持这样设置编码,还是去设置环境变量吧
PS:pdo连接方式是可以的、。但CI没有写pdo的驱动。
 楼主| 发表于 2011-5-24 12:56:46 | 显示全部楼层
这是我nls_lang的设置
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8

和数据库的字符集也一样
select userenv('language') from dual;
 楼主| 发表于 2011-5-24 13:04:53 | 显示全部楼层
谢谢,现在这个问题解决了,看来对于oracle OCI方式的确就是设置NLS_LANG
发表于 2012-4-9 18:34:10 | 显示全部楼层
nls_lang怎么设置?
发表于 2012-12-8 17:43:56 | 显示全部楼层
恩,不错,可以

本版积分规则