字符集支持
上级主题: Greenplum数据库参考指南
gpinitsystem通过在初始化时间读取gp_init_config 文件中的 ENCODING参数的设置来定义Greenplum数据库系统的默认字符集。 默认的字符集是UNICODE 或UTF8.
除了用作系统级默认值之外,还可以创建一个不同字符集的数据库。例如:
重点: 虽然用户可以指定数据库所需的任何编码, 但选择不是用户所选择的语言环境所期望的编码是不明智的。该LC_COLLATE和 LC_CTYPE设置意味着特定的编码,并且依赖于区域设置的操作(例如排序)可能会误解处于不兼容编码的数据。
由于这些区域设置被gpin系统冻结,因此在不同数据库中使用不同编码的灵活性明显比实际更理论
服务器和客户端之间的字符集转换
Greenplum数据库支持服务器和客户端之间的某些字符集组合的自动字符集转换。 转换信息存储在主 pg_conversion系统目录表中。 Greenplum数据库带有一些预定义的转换,或者用户可以使用SQL命令创建一个新的转换CREATE CONVERSION.
服务器字符集 | 可用的客户端字符集 |
---|---|
BIG5 | 不支持作为服务器编码 |
EUC_CN | EUC_CN, MULE_INTERNAL, UTF8 |
EUC_JP | EUC_JP, MULE_INTERNAL, SJIS, UTF8 |
EUC_KR | EUC_KR, MULE_INTERNAL, UTF8 |
EUC_TW | EUC_TW, BIG5, MULE_INTERNAL, UTF8 |
GB18030 | 不支持作为服务器编码 |
GBK | 不支持作为服务器编码 |
ISO_8859_5 | ISO_8859_5, KOI8, MULE_INTERNAL, UTF8, WIN866, WIN1251 |
ISO_8859_6 | ISO_8859_6, UTF8 |
ISO_8859_7 | ISO_8859_7, UTF8 |
ISO_8859_8 | ISO_8859_8, UTF8 |
JOHAB | JOHAB, UTF8 |
KOI8 | KOI8, ISO_8859_5, MULE_INTERNAL, UTF8, WIN866, WIN1251 |
LATIN1 | LATIN1, MULE_INTERNAL, UTF8 |
LATIN2 | LATIN2, MULE_INTERNAL, UTF8, WIN1250 |
LATIN3 | LATIN3, MULE_INTERNAL, UTF8 |
LATIN4 | LATIN4, MULE_INTERNAL, UTF8 |
LATIN5 | LATIN5, UTF8 |
LATIN6 | LATIN6, UTF8 |
LATIN7 | LATIN7, UTF8 |
LATIN8 | LATIN8, UTF8 |
LATIN9 | LATIN9, UTF8 |
LATIN10 | LATIN10, UTF8 |
MULE_INTERNAL | MULE_INTERNAL, BIG5, EUC_CN, EUC_JP, EUC_KR, EUC_TW, ISO_8859_5, KOI8, LATIN1 to LATIN4, SJIS, WIN866, WIN1250, WIN1251 |
SJIS | 不支持作为服务器编码 |
SQL_ASCII | 不支持作为服务器编码 |
UHC | 不支持作为服务器编码 |
UTF8 | 所有支持的编码 |
WIN866 | WIN866 |
ISO_8859_5 | KOI8, MULE_INTERNAL, UTF8, WIN1251 |
WIN874 | WIN874, UTF8 |
WIN1250 | WIN1250, LATIN2, MULE_INTERNAL, UTF8 |
WIN1251 | WIN1251, ISO_8859_5, KOI8, MULE_INTERNAL, UTF8, WIN866 |
WIN1252 | WIN1252, UTF8 |
WIN1253 | WIN1253, UTF8 |
WIN1254 | WIN1254, UTF8 |
WIN1255 | WIN1255, UTF8 |
WIN1256 | WIN1256, UTF8 |
WIN1257 | WIN1257, UTF8 |
WIN1258 | WIN1258, UTF8 |
要启用自动字符集转换,用户必须告诉Greenplum数据库用户要在客户端中使用的字符集(编码)。有几种方法可以实现这一点:
- 使用\encoding 命令在psql中, 它允许用户即时更改客户端编码。
使用PGCLIENTENCODING 环境变量。当在客户端的环境变量定义为 PGCLIENTENCODING 时,与服务器建立连接时会自动选择该客户端编码。(这可以随后使用上述其他任何方法重写)
如果特定字符的转换是不可能的 “ 假设 用户为服务器选择了 EUC_JP 而为客户端选择了 LATIN1 则一些日文字符在LATIN1 没有表现形式” 则会报告错误。
如果客户端字符集被定义为SQL_ASCII, 无论服务器的字符集如何,禁止编码转换。 除非用户使用所有ASCII数据,否则SQL_ASCII 是不明智的。 不支持SQL_ASCII 作为服务器编码。
1 并非所有API都支持所有列出的字符集。例如,JDBC驱动程序不支持MULE_INTERNAL,LATIN6,LATIN8和LATIN10。
SQL_ASCII设置与其他设置的行为大不相同。字节值0-127根据ASCII标准进行解释,字节值128-255作为未解释的字符。如果使用任何非ASCII数据,则将SQL_ASCII设置用作客户端编码是不明智的。不支持SQL_ASCII作为服务器编码。