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 数据类型,如果 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数据。

驱动程序管理器将驱动程序和 DSN 名称存储在 Unicode 中,并根据需要将它们映射到 ANSI。 如果一个 Unicode 字符无法映射到一个 ANSI 字符(例如,当代码页中包含的字符不是计算机本地代码页的字符时,这些字符用于驱动程序和 DSN 名称),则无法转换的字符将由系统提供的默认字符代替。