注册

php使用PDO连接达梦,中文乱码

DM_919317 2021/09/08 1826 6 已解决

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【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); } }

查询结果如下:
Snipaste_20210908_160030.png

回答 0
暂无回答
扫一扫
联系客服