为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:DM8
【操作系统】:WINDOWS
【CPU】:i7-8700
【问题描述】*:数据库编码为GBK;使用dm方式可以正常查询:
$link = dm_connect("10.10.30.29:5236", "SYSDBA", "SYSDBA");
dm_setoption($link, 1, 12345, 1); //设置 dm 连接和语句的相关属性,设置UTF8
$sql = "select * from person.address limit 10";
$result = dm_exec($link, $sql);
print " 查询结果:</br><pre>";
while ($line = dm_fetch_array($result)) {
dump($line);
echo '<br>';
}
// /*断开连接*/
dm_close($link);
但是使用PHP的PDO方式连接达梦,中文出现乱码
网上说设置dm_srv.conf中的CHAR_CODE=(PG_UTF8),但是设置了并未生效,在pdo的dsn后面加上charset=utf8也不管用,使用set names utf8直接提示语法错误。。。
dm_setoptions可以设置编码,但是在pdo中不知道该如何设置达梦的编码,PDO代码如下:
$dm_conf = array(
'host' => '10.10.30.29:5236', //连接地址及端口
'db' => 'OTHER', //数据库名
'db_user' => 'SYSDBA', //用户名
'db_pwd' => 'SYSDBA', //密码
);
$pdo = new \PDO("dm:host=" . $dm_conf['host'] . ";dbname=" . $dm_conf['db'] . ";12345=1",
$dm_conf['db_user'],
$dm_conf['db_pwd']
);
$pdo->exec('SET SCHEMA person;');
$sql = "select * from person.address where addressid = 11";
$stmt = $pdo->prepare($sql);
if ($stmt === false) {
var_dump($pdo->errorInfo());
die;
}
$rs = $stmt->execute();
if ($rs) {
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
// $row = array_change_key_case($row, CASE_LOWER); //将数组的key转为
// echo iconv('GB2312', 'UTF-8', $row['ADDRESS1']); //将字符串的编码从GB2312转到UTF-8小写
var_dump($row);
}
}
查询结果如下:
请问该怎么设置呢。。。