谁一开始就是大神?

Yii2连接Oracle数据库读取数据乱码,求高人点。

背景:
数据库 -> oracle;
数据库字符集 -> ZH16GBK;
页面字符集全部UTF-8;

情况:
在测试连接oracle数据库读取数据库的过程中,遇到取中文乱码问题。
并且只是存在使用yii配置文件连接数据库时存在乱码。

一、使用原生连接数据库 无乱码

$conn = oci_connect('test', 'test','localhost/test','UTF8');

if (!$conn) {
	$e = oci_error();
	trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);

}

$name = oci_parse($conn, 'select name from ih_custom');
if (!$name) {
	$e = oci_error($conn);
	trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
}

while ($row = oci_fetch_array($name, OCI_ASSOC+OCI_RETURN_NULLS))
{
	var_dump($row);
}

输出结果:

array (size=1)
  'NAME' => string '系统机构' (length=12)

array (size=1)
  'NAME' => string ' ' (length=15)

array (size=1)
  'NAME' => string 'uu' (length=2)

二、使用YII2框架的\yii\db\Connection()连接数据库 出现乱码,全部????

$connection = new \yii\db\Connection([
		'dsn' => 'oci:dbname=//localhost:1521/test',
		'username' => 'test',
		'password' => 'test',
		'charset' => 'UTF8'
		]);
$connection->open();

$command = $connection->createCommand("select name from ih_custom");
$names = $command->queryAll();
var_dump($names);

输出结果:

array (size=13)
  0 => 
    array (size=1)
      'NAME' => string '????' (length=4)
  1 => 
    array (size=1)
      'NAME' => string '?????' (length=5)
  2 => 
    array (size=1)
      'NAME' => string 'uu' (length=2)

经过我的多次测试,在使用原生连接数据库没问题,只要使用Yii框架的连接数据库方法必出现?????乱码。求高人指点

YII连接数据库默认都是用的PDO的扩展,按照文档对$charset的注释,该属性只适用于MySQL, PostgreSQL and CUBRID 数据库,其他的使用数据库的默认字符集。可改为 ‘dsn’ => ‘oci:dbname=//localhost:1521/test;charset=utf-8’试试

赞(0) 打赏
未经允许不得转载:菜鸟之家 » Yii2连接Oracle数据库读取数据乱码,求高人点。

评论 抢沙发

登录

找回密码

注册