跳到主要内容

Unicode

本章提供 Unicode 标准的简要概述并描述如何在 ODBC 应用程序中使用它。

Unicode 概述

Unicode 是字符编码标准,它提供了每种主要语言中每个字符的使用方法。

在 Unicode 标准中,每个字符被分配了一个唯一的数字值和名称。这些值在跨多个平台的应用程序之间是一致的。

尽管 Unicode 提供了一种使用多种语言表示文本的一种方式,但是也有不同的版本,为每个字符提供不同的数据大小。

Unicode 版本

尽管 Unicode 提供了一种使用多种语言表示文本的一种方式,但是也有不同的版本,为每个字符提供不同的数据大小。

以下列表描述了在 GBase 8s ODBC 应用程序中支持的版本。

  • UCS-2

    ISO 编码标准,将 Unicode 字符映射到每个 2 字节。UCS-2 是 Windows(TM) 上通用的编码标准。

    GBase AIX 平台的 GBase 8s ODBC Driver 支持 UCS-2 编码。Windows(TM) 的 GBase 8s ODBC Driver 仅支持 UCS-2。

  • UCS-4

    ISO 编码标准,将 Unicode 字符映射到每个 4 字节。

    UNIX(TM) 平台上,GBase 8s ODBC Driver 支持 UCS-4。

  • UTF-8

    基于单字节(8 位)的编码标准。UTF-8 定义了一种将所有 Unicode 字符转换为可变长度(1 - 4)字节编码的机制。

所有的 UNIX(TM) 应用程序的 GBase 8s ODBC Driver 使用 UTF-8 编码,连接 Data Direct(以前称为 Merant)驱动程序管理器,

ASCII 和 UTF-8 之下,7 位 ASCII 字符句具有相同的编码。这样做的好处是 UTF-8 可以与大量现有的软件一起使用而不需要大量的修改。

重要

在使用 Unicode 的应用程序中,驱动程序执行从 Unicode 到数据库语言环境的代码集转换工作。UTF-8 是唯一可以设置为客户端语言环境的 Unicode 代码集类型。

ODBC 应用程序中的 Unicode

查看典型的 ODBC 应用程序架构。

下图显示了具有驱动管理器和 GBase 8s ODBC Driver 的典型的 ODBC 应用程序架构。

图: 典型的 ODBC 应用程序架构

odbc-8.png

在此场景中,如果应用程序启用 Unicode 的 API,则必须将其连接到启用 Unicode 的 GBase 8s ODBC Driver(3.8 版本或更高),来确保数据没有丢失。如果应用程序调用 ANSI ODBC API,则应用程序可以链接到启用 Unicode 的驱动程序或 ANSI 驱动程序。

GBase 8s ODBC Driver 继续支持 GBase 8s GLS。因此,在字符缓冲区中获取的所有数据都可以在客户端语言环境代码集中获取。只有使用宽字符缓冲区获取的数据才使用 Unicode。

在 Windows(TM) 上,如果 ODBC 驱动程序没有启用 Unicode,则 ODBC Driver Manager 会将所有的 Unicode API 函数调用映射到 ANSI ODBC API。

如果 ODBC 驱动程序启用了 Unicode,则 Windows(TM) ODBC Driver Manager(4.0 版本或更高)将所有的 ANSI ODBC API 映射到 Unicode ODBC API。 用于 UNIX(TM) 的 Data Direct(之前称为 Merant)驱动程序管理器也使用这种方式。

重要

CSDK Version 2.70 中有两个 ODBC 驱动程序。一个只有 ANSI API(称为 ANSI ODBC Driver Version 3.34),另一个有 ANSI 和 UNICODE API(称为 Unicode ODBC Driver Version 3.80)。对于 CSDK 2.80 或更高版本,只有一个支持 ANSI 和 UNICODE API 的 ODBC 驱动程序。

UNIX 平台的 GBase 8s Driver Manager Replacement (DMR) 不会在 Unicode 和 ANSI API 之间进行映射。

ODBC 应用程序中的 Unicode

本节提供有关在 GBase 8s ODBC 应用程序中编译和配置 Unicode 的详细信息。

配置

因为 GBase 8s ODBC Driver 在 UNIX(TM) 平台上支持不同类型的 Unicode,因此应用程序使用的 Unicode 类型必须在 odbc.ini 文件的 ODBC 部分中指明。

在 ODBC 部分中指示 Unicode 的类型,如下所示:

[ODBC]
.
.
.
UNICODE=UCS-4
重要

启用 Unicode 的应用程序必须在 odbc.ini 文件中指示 Unicode 的类型。如果未在 odbc.ini 中设置 Unicode 参数,则缺省类型为 UCS-4。

要求所有的 UNIX(TM) ODBC 应用程序必须如下设置 odbc.ini 文件中的 Unicode 类型:

  • UNIX(TM) 上(包括 AIX 64 位)的 ANSI ODBC 应用程序必须设置 UNICODE=UCS-4
  • GBase AIX 32 位上的 ANSI ODBC 应用程序必须设置 UNICODE-UCS-2
  • 使用 Data Direct(之前称为 Merant)ODBC 驱动程序管理器的 ANSI ODBC 应用程序不会在文件中指示不是 UTF-8 的 Unicode 类型。

下表提供了 odbc.ini 设置的概述:

平台驱动程序管理器odbc.ini 设置
AIXData DirectUTF-8
AIX 32–位DMR or noneUCS-2
AIX 64–位Data DirectUTF-8
UNIX(TM)Data DirectUTF-8
UNIX(TM)DMR 或无UCS-4
Windows(TM)Windows(TM) ODBC Driver ManagerN/A
重要

如果下列条件都满足,则设置会自动重置,且不会发出警告或错误消息:

  • 该应用程序是一个 ANSI 应用程序。
  • 正在与 DMR 链接或没有链接。
  • odbc.ini 文件中的 Unicode 设置与表中显示的值不匹配。

支持的 Unicode 函数

GBase 8s ODBC Driver 支持接受指向字符串或 SQLPOINTER 参数指针的所有函数的 ANSI 和 Unicode 版本。

以下列表描述了支持的两种类型的函数:

ODBC “A” 函数

一般的 ODBC 函数,接受单字节(ASCII)数据作为所有字符/字符串参数的输入。

ODBC “W” 函数

接受 “宽字符” 作为所有的字符/字符串参数的输入的 Unicode 函数。

ODBC 规范定义了具有 wchar_t 数据类型的三个函数。该数据类型是标准 C 库宽字符数据类型。

GBase 8s ODBC Driver 支持下列 Unicode “wide” 函数:

  • SQLColAttributeW
  • SQLColAttributesW
  • SQLConnectW
  • SQLDescribeColW
  • SQLErrorW
  • SQLExecDirectW
  • SQLGetConnectAttrW
  • SQLGetCursorNameW
  • SQLSetDescFieldW
  • SQLGetDescFieldW
  • SQLGetDescRecW
  • SQLGetDiagFieldW
  • SQLGetDiagRecW
  • SQLPrepareW
  • SQLSetConnectAttrW
  • SQLSetCursorNameW
  • SQLColumnsW
  • SQLGetConnectOptionW
  • SQLGetTypeInfoW
  • SQLSetConnectOptionW
  • SQLSpecialColumnsW
  • SQLStatisticsW
  • SQLTablesW
  • SQLDataSourcesW
  • SQLDriverConnectW
  • SQLBrowseConnectW
  • SQLColumnPrivilegesW
  • SQLGetStmtAttrW
  • SQLSetStmtAttrW
  • SQLForeignKeysW
  • SQLNativeSqlW
  • SQLPrimaryKeysW
  • SQLProcedureColumnsW
  • SQLProceduresW
  • SQLTablePrivilegesW
  • SQLDriversW

从 Version 4.10 起,SQLGetDiagRecW 函数 BufferLength 参数定义为:MessageText 缓冲区的长度,以字符为单位。