Unicode 数据

SQL Unicode 数据类型用于描述在 DBMS 上以本机身份驻留在 Unicode 中的数据。 C Unicode 数据类型允许应用程序将数据绑定到 Unicode 缓冲区。 驱动程序管理器可以从 Unicode C 类型 (SQL_C_WCHAR) 转换数据,使其使用 ANSI 驱动程序运行。

ODBC 3.0 或 2.x 应用程序将始终绑定到 ANSI 数据类型。 为了获得最佳性能,如果 SQL 列类型为 ANSI,那么 ODBC 3.5(或更高版本)应用程序应该绑定到 ANSI C 数据类型,如果 SQL 列类型是 Unicode,那么应该绑定到 Unicode C 数据类型。

SQL Unicode 类型指示器是 SQL_WCHAR、SQL_WVARCHAR 和 SQL_WLONGVARCHAR。 SQL_WCHAR 数据具有固定的字符串长度,SQL_WVARCHAR 具有声明最大值的可变长度,SQL_WLONGVARCHAR 具有含最大值的可变长度,该最大值取决于数据源。

C Unicode 类型指示器为 SQL_C_WCHAR。 这是每个 SQL Unicode 类型指示器的默认值。 所有 SQL 类型都可以转换为 SQL_C_WCHAR,而 SQL_C_WCHAR 也可以转换为所有 SQL 类型。 应用程序可以通过以下三种方式之一检索数据:

  • 以 SQL_C_CHAR 的形式检索数据。

  • 以 SQL_C_WCHAR 的形式检索数据。

  • 以 SQL_C_TCHAR 的形式数据声明。 如果应用程序编译为 Unicode 应用程序,则此宏将插入 SQL_C_WCHAR;如果应用程序编译为 ANSI 应用程序,则插入 SQL_C_CHAR。

SQL_C_TCHAR 在函数中声明,如下所示:

SQLBindParameter(StatementHandle, 1, SQL_PARAM_INPUT, SQL_C_TCHAR, SQL_WCHAR, NameLen, 0, Name, 0, &Name)  

将应用程序编译为 Unicode 应用程序时,ValueType 参数将从 SQL_C_TCHAR 更改为 SQL_C_WCHAR。 将应用程序编译为 ANSI 应用程序时,ValueType 参数将更改为 SQL_C_CHAR。

Unicode 驱动程序仍必须支持 ANSI 数据类型,包括 SQL_CHAR。 如果使用 Unicode 驱动程序的应用程序绑定到 SQL_CHAR,驱动程序管理器不会将 SQL_CHAR 数据映射到 SQL_WCHAR。 Unicode 驱动程序必须接受 SQL_CHAR 数据。

驱动程序管理器会以 Unicode 格式存储驱动程序和 DSN 名称,并根据需要将它们映射到 ANSI。 如果 Unicode 字符无法映射到 ANSI 字符(如果驱动程序和 DSN 名称中使用了来自非计算机本机代码页的代码页中的字符,则可能发生这种情况),则无法转换的字符由系统提供的默认字符表示。