CI 连接oracle 字符乱码
使用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方式
请问还有什么地方需要配置 帮你查了一下,OCI连接方式需要设置环境变量NLS_LANG的,具体你可以搜一下。
另外我看了下CI 的oci8_driver.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的驱动。 这是我nls_lang的设置
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
和数据库的字符集也一样
select userenv('language') from dual; 谢谢,现在这个问题解决了,看来对于oracle OCI方式的确就是设置NLS_LANG nls_lang怎么设置? 恩,不错,可以
页:
[1]