区域设置指定用户的语言、所在国家/地区以及任何特殊的可变首选项(例如排序规则)。Vertica 会根据区域设置确定某些字符串函数的行为。此外,区域设置还确定了需要进行排序和比较的各种 SQL 命令(例如聚合 GROUP BY
和 ORDER BY
子句、联接和分析 ORDER BY
子句)的排序规则。
Vertica 数据库的默认区域设置为 en_US@collation=binary
(美国英语)。可以定义供数据库中的所有会话使用的新默认区域设置,也可以覆盖单个会话的区域设置。但是,无论会话排序规则如何,请始终采用默认 en_US@collation=binary
排序规则来对投影进行排序。特定区域设置的排序功能会在查询时应用。
如果您将区域设置设为 NULL,则 Vertica 会将区域设置设为 en_US_POSIX
。您可以通过发出 vsql 元命令 \locale
将区域设置设回默认区域设置和排序规则。例如:
注意
=> set locale to '';
INFO 2567: Canonical locale: 'en_US_POSIX'
Standard collation: 'LEN'
English (United States, Computer)
SET
=> \locale en_US@collation=binary;
INFO 2567: Canonical locale: 'en_US'
Standard collation: 'LEN_KBINARY'
English (United States)
=> \locale
en_US@collation-binary;
可以通过 ODBC、JDBC 和 ADO.net 设置区域设置。
ICU 区域设置支持
Vertica 将 ICU 库用于区域设置支持;您必须使用 ICU 区域设置语法指定区域设置。数据库会话使用的区域设置并非来源于操作系统(通过 LANG
变量),因此 Vertica 建议您为运行 vsql 的每个节点设置 LANG
,如下一个部分所述。
虽然 ICU 库可以指定排序规则、货币和日历首选项,但 Vertica 仅支持排序规则组件。与排序规则无关的任何关键字都将被拒绝。无论会话排序规则如何,始终使用 en_US@collation=binary
排序规则对投影进行排序。特定区域设置的排序功能会在查询时应用。
SET DATESTYLE TO
...
命令提供了日历的一些方面,但 Vertica 仅支持将美元作为货币。
为会话更改 DB 区域设置
此示例将会话区域设置设置为“泰语(Thai)”。
-
在操作系统级别,针对每个运行 vsql 的节点,按照以下方式将
LANG
变量设置为区域设置语言:export LANG=th_TH.UTF-8
注意
如果按照所示方法设置LANG=
未起作用,则表示可能未安装区域设置的操作系统支持。 -
针对每个 Vertica 会话(从 ODBC/JDBC 或 vsql 中),设置语言区域设置。
从 vsql 中:
\locale th_TH
-
从 ODBC/JDBC 中:
"SET LOCALE TO th_TH;"
-
在 PUTTY(或 ssh 终端)中,按照以下步骤更改设置:
settings > window > translation > UTF-8
-
单击应用 (Apply),然后单击保存 (Save)。
加载的所有数据必须采用 UTF-8 格式而非 ISO 格式,如分隔数据中所述。与 UTF-8 不兼容的字符集(例如 ISO 8859-1 (Latin1))不受支持,因此 SUBSTRING 等函数对于多字节字符而言无法正常工作。因此,区域设置的设置应无法正常工作。如果转换设置 ISO-8859-11:2001 (Latin/Thai) 正常工作,则表示未正确加载数据。要正确转换数据,请使用一个实用程序,例如 Linux
iconv
。