实验重现过程:
oracle创建实例,字符集选择US7ASCII
创建表
create table test (name varchar2(50));
插入数据
insert into test values ('中国');
insert into test values ('达梦');
commit;
达梦数据库创建dblink(OCI方式)
create link orcl connect 'ORACLE' with "SYSTEM" identified by "oracle" using '192.168.56.101/orcl';
使用dblink查询oracle数据,中文无法显示,为“?”
oracle中查询是正常的
而且达梦数据库设置NLS_LANG,LANG环境变量都没有效果
解决方法:
使用ODBC方式,可以正常使用。
具体如下
配置oracle的ODBC
1.安装unixodbc
yum install unixODBC unixODBC-devel
安装后查看:
2.将oracle的odbc驱动放到达梦服务器上,配置odbc.ini文件
如下:oracle部分是配置信息,其中driver为oracle的ODBC的驱动
3.测试odbc连接oracle
正常则连接成功:
可能会报错找不到libsqora.so.11.1
ldd libsqora.so.11.1
是找不到libodbcinst.so.1
需要创建软连接,安装unixODBC后会在/usr/lib64 有libodbcinst.so.2文件
使用libodbcinst.so.2文件创建软连接即可
ln -s libodbcinst.so.2 libodbcinst.so.1
4.达梦创建ODBC的dblink
create link orcl_odbc connect 'ODBC' with "SYSTEM" identified by "oracle" using 'oracle';
使用orcl_odbc 查询数据,发现是乱码:
5.设置环境变量LANG为AMERICAN_AMERICA.US7ASCII
export LANG=AMERICAN_AMERICA.US7ASCII
查询正常: