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框架的连接数据库方法必出现?????乱码。求高人指点
小蘿蔔丁 补充于 2014-08-19 15:30
引用来自 大鹏展翅 的评论
YII连接数据库默认都是用的PDO的扩展,按照文档对$charset的注释,该属性只适用于MySQL, PostgreSQL and CUBRID 数据库,其他的使用数据库的默认字符集。可改为 'dsn' => 'oci:dbname=//localhost:1521/test;charset=utf-8'试试
根据你的建议,报了个错误,说是charset不对,改为utf8即可。
正确dns为:'dsn' => 'oci:dbname=//localhost:1521/test;charset=utf8'。
最后正常显示中文,灰常感谢。
最佳答案
其他 0 个回答
没有找到数据。
小蘿蔔丁
注册时间:2014-08-19
最后登录:2017-01-20
在线时长:357小时58分
最后登录:2017-01-20
在线时长:357小时58分
- 粉丝7
- 金钱370
- 威望0
- 积分3940