服务器区域设置与客户端区域设置
Vertica 将数据库服务器的区域设置与客户端应用程序的区域设置区分开来:
-
服务器区域设置仅影响服务器端查询处理的排序行为。
-
客户端应用程序将验证区域设置是否适当,以正确显示字符。
以下部分描述了最佳实践,以确保可预测的结果。
服务器区域设置
服务器会话的区域设置应按照为数据库指定默认区域设置中所述进行设置。如果不同会话的区域设置不同,请的每个会话开始时,从客户端设置服务器的区域设置。
vsql 客户端
-
如果数据库没有默认的会话区域设置,请将会话的服务器区域设置设置为所需的区域设置。
-
运行 vsql 客户端的终端仿真器中的区域设置应该设置为等同于服务器端的会话区域设置(ICU 区域设置)。这样就能在服务器上正确排序数据,并在客户端上正确显示数据。
-
vsql 的所有输入数据应该为 UTF-8,而所有输出数据都以 UTF-8 进行编码。
-
Vertica 不支持非 UTF-8 编码和关联的区域设置值;
-
有关设置区域设置和编码的说明,请参阅终端仿真器文档。
ODBC 客户端
-
ODBC 应用程序可以采用 ANSI 或 Unicode 模式。如果用户应用程序采用 Unicode,ODBC 使用的编码是 UCS-2。如果用户应用程序采用 ANSI,数据必须为单字节 ASCII,这与数据库服务器上使用的 UTF-8 兼容。向 Vertica 服务器传递数据时,ODBC 驱动程序会将 UCS-2 转换为 UTF-8,并会将 Vertica 服务器发来的数据从 UTF-8 转换为 UCS-2。
-
如果用户应用程序尚未采用 UCS-2,应用程序必须将输入数据转换为 UCS-2,否则会发生异常结果。例如:
-
对于传递到 ODBC API 的非 UCS-2 数据,当它被解释为 UCS-2 时,它可能会导致无效的 UCS-2 符号传递给 API,从而导致错误。
-
在备用编码中提供的符号可以是有效的 UCS-2 符号。如果发生这种情况,则会将不正确的数据插入数据库。
-
-
如果数据库没有默认会话区域设置,ODBC 应用程序应该使用
SQLSetConnectAttr
来设置所需的服务器会话区域设置(如果它不同于数据库范围设置)。这样可以在服务器上实现预期的排序规则以及字符串函数行为。
JDBC 和 ADO.NET 客户端
-
JDBC 和 ADO.NET 应用程序使用 UTF-16 字符集编码并负责将任何非 UTF-16 编码数据转换为 UTF-16。如果违反此编码,同样的警告也适用于 ODBC。
-
在传递到 Vertica 服务器并将 Vertica 服务器发送的数据从 UTF-8 转换为 UTF-16 时,JDBC 和 ADO.NET 驱动程序会将 UTF-16 数据转换为 UTF-8。
-
如果在数据库级别没有默认会话区域设置,JDBC 和 ADO.NET 应用程序应该通过执行 SET LOCALE TO 命令设置正确的服务器会话区域设置,以便在服务器上实现预计的排序规则以及字符串函数行为。有关详细信息,请参阅SET LOCALE。