为主变量设置CCSID

除二进制数据外,所有 Db2 字符串数据都有与之关联的编码方案和编码字符集ID(CCSID)。 您可以将编码方案和CCSID与单个主机变量相关联。 这些宿主变量中的任何数据都将与该编码方案和CCSID相关联。

过程

为宿主变量设置CCSID:

在相应的主机变量声明之后,并在您第一次引用该主机变量之前,指定DECLARE VARIABLE语句。

该语句将编码方案和CCSID与各个主机变量相关联。 您可以在静态或动态 SQL 应用程序中使用此语句。

限制 :您不能使用DECLARE VARIABLE语句来控制使用SQLDA检索或更新的数据的CCSID和编码方案。
DECLARE VARIABLE语句对宿主变量有以下影响:
  • 当您使用主机变量更新表时,本地子系统或远程服务器会认为主机变量中的数据是用DECLARE VARIABLE语句指定的CCSID和编码方案编码的。
  • 当您将数据从本地或远程表检索到主机变量中时,检索到的数据将转换为DECLARE VARIABLE语句指定的CCSID和编码方案。

示例

假设您正在编写一个在 Db2 for z/OS® 子系统上运行的C程序。 子系统采用EBCDIC应用编码方案。 C程序从使用CCSID UNICODE选项定义的本地表的以下列中检索数据:
PARTNUM CHAR(10)
JPNNAME GRAPHIC(10)
ENGNAME VARCHAR(30)
由于子系统的应用程序编码方案是EBCDIC,因此检索到的数据也是EBCDIC。 为了使检索的数据成为Unicode,使用DECLARE VARIABLE语句指定从这些列检索的数据使用子系统的默认Unicode CCSID进行编码。
假设您想检索Unicode CCSID 1208中的字符数据和Unicode CCSID 1200中的图形数据。 使用以下DECLARE VARIABLE语句:
EXEC SQL BEGIN DECLARE SECTION;
char hvpartnum[11];
EXEC SQL DECLARE :hvpartnum VARIABLE CCSID 1208;
sqldbchar hvjpnname[11];
EXEC SQL DECLARE :hvjpnname VARIABLE CCSID 1200;
struct {
        short len;
        char d[30];
       } hvengname;
EXEC SQL DECLARE :hvengname VARIABLE CCSID 1208;
EXEC SQL END DECLARE SECTION;