首先我的编程环境: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