linux下oracle occi编程插入数据库中文显示问号问题的解决

        首先我的编程环境:centos6.2 64位,系统默认字符集(通过echo $LANG查询)是zh_CN.UTF-8,编辑的*.cpp,*.h文本也是utf-8的,远端oracle数据库的字符集

(select * from nls_database_parameters)NLS_CHARACTERSET:ZHS16GBK,

(select userenv('language') from dual):Simplified Chinese_China.ZHS16GBK,中文字段类型是varchar2(16)

1.解压或者安装好occi库

2.配置libs

#vi /etc/ld.so.conf

添加oracle动态库地址,比如/root/instantclient_11_2/

#ldconfig

3.配置oracle数据库连接(这里也是配置最后程序的运行环境),可以编辑文件~/.bash_profile文件,增加一下内容

LD_LIBRARY_PATH=$ LD_LIBRARY:/root/instantclient_11_2

TNS_ADMIN=/root/instantclient_11_2    //新建tnsnames.ora文件所在地

NLS_LANG=american_america.AL32UTF8 //语言设置

#NLS_LANG="Simplified Chinese_China.ZHS16GBK"  

注:这里网上说的大多是下面这中配置方法,但是我试了之后还是不行,最后配置为上面那种才可以,不知道为什么?

附:

tnsnames.ora文件可以通过net manager创建一个服务命名,该连接名要与occi的函数createConnection第三个参数一致,才能从ora文件中读取正确的信息。

NLS_LANG格式:
NLS_LANG = language_territory.charset
有三个组成部分(语言、地域和字符集),每个成分控制了NLS子集的特性。其中:language 指定服务器消息的语言。territory 指定服务器的日期和数字格式。charset 指定字符集

4.代码中Environment::createEnvironment(Environment::DEFAULT)

其中用到中文的地方是采用如下方式:

char ctest[] = "中国";

char ch[10]={0};

sprintf(ch,"%s",ctest);

char sql[100]={0};

sprintf(sql, "insert into table(....)",...,ch,...);

ExecuteSQL(sql);

参考来源:

http://blog.163.com/linzhigui1988@126/blog/static/1018865812012196531527/

http://www.linuxidc.com/Linux/2012-07/65209.htm

http://blog.sina.com.cn/s/blog_53a72add01015zj4.html

http://blog.csdn.net/syc0616/article/details/3320584

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值