Unicode支持概述¶
ACCI现在可以使用多字节和Unicode字符集进行应用程序开发。 完全支持Unicode的UTF16编码。 创建ACCI环境时,应用程序可以指定其字符集。 带有字符串参数(例如SQL语句,用户名,错误消息,对象名等)的ACCI接口已经扩展为可以处理任何字符集中的数据。 关系表或对象中的字符数据可以位于任何字符集中。 ACCI可用于开发多语言,全局和Unicode应用程序。
指定字符集¶
当初始化ACCI环境时,ACCI应用程序必须指定客户端字符集。客户端字符集指定了所有SQL语句、对象/用户名、错误消息和所有CHAR数据类型(CHAR、VARCHAR2、LONG)列/属性的数据的字符集。
现在提供了一个新的createEnvironment()接口,它接受客户端字符集,这允许ACCI应用程序动态地设置字符集信息。
ACCI环境中的字符集仅在客户端。它们指示ACCI应用程序用于与神通交互的字符集。数据库字符集是在创建数据库时指定的。在服务器处理数据之前,神通将所有的数据从客户端字符集转换到数据库字符集。
例6-1:如何使用Unicode支持
Environment *env = Environment:createEnvironment("UTF8","UTF8");
该语句创建一个以UTF8作为客户端字符集,以UTF8作为客户端国家字符集的ACCI环境。
任何有效的字符集名称都可以传递给createEnvironment()。 可以传递ACCI特定的字符串UTF16指定为字符集。
可以传递的字符集名称如下(大小写混合使用也可以识别):
| 可用字符集 |
|---|
| us7ascii |
| US7ASCII |
| zhs16gbk |
| ZHS16GBK |
| zhs32gb18030 |
| ZHS32GB18030 |
| zht16big5 |
| ZHT16BIG5 |
| utf8 |
| UTF8 |
| al32utf8 |
| AL32UTF8 |
| utf16 |
| UTF16 |
| al16utf16 |
| AL16UTF16 |
使用UString数据类型¶
UString是一种数据类型,它使应用程序和ACCI库能够以UTF-16编码传递和接收Unicode数据。 UString是使用utext数据类型从C++ STL basic_string模板化的。
typedef basic_string <utext> UString;
utext数据类型是2字节短的数据类型,并以UTF-16编码表示Unicode字符。 Unicode字符的代码点可以1 utext或2 utext(2或4个字节)表示。 欧洲和大多数亚洲文字的字符用单个utext表示。 Unicode 3.1标准中定义的补充字符用2个utext元素表示。
env = Environment::createEnvironment("UTF16", "UTF16");
Connection* conn = env->createConnection((utext*)L"system", (utext*)L"123456", (utext*)L"127.0.0.1:1521/orcl");
env->terminateConnection(conn);
Environment::terminateEnvironment(env);
支持Unicode的数据类型¶
支持unicode使用的数据类型包括:
CLOB数据类型¶
神通提供CLOB数据类型用于存储和处理大量字符数据。clob表示数据库字符集中的数据。clob可以用作关系表中的列类型,也可以用作对象类型中的属性。
ACCI Clob支持多字节和UTF16字符集,要以多字节字符集读取或写入数据,请使用带有char缓冲区的现有读取和写入接口。 使用utext缓冲区存储UTF16数据的新的重载接口已作为read(),write()方法添加到Clob类中。这些方法的参数和返回值可以是字节,也可以是字符,具体取决于LOB的字符集。
通过getCharSetIdUString()可以获取当前Clob所用字符集。
通过setCharSetIdUString()接口可以设置当前Clob使用字符集。
在设置Clob当前使用字符集之后,read出来的数据就和当前Clob所设置的字符集一致。