字符集支持
字符集支持¶
SeaboxMPP/SeaboxSQL数据库中的字符集支持允许您以各种字符集存储文本,包括单字节字符集(如ISO 8859系列)和多字节字符集(如EUC(扩展Unix代码),UTF-8),和Mule内部代码。客户端可以透明地使用所有支持的字符集,但少数只能在服务器上使用(即作为一种服务器端编码)。
使用seabox init
/initdb
初始化SeaboxMPP/SeaboxSQL数据库阵列时,会选择默认字符集。
创建数据库时可以覆盖它,因此您可以拥有多个数据库,每个数据库具有不同的字符集。
名称 | 描述 | 语言 | 是否服务端? | 字节/字符 | 别名 |
---|---|---|---|---|---|
BIG5 | Big Five | 繁体中文 | No | 1-2 | WIN950, Windows950 |
EUC_CN | Extended UNIX Code-CN | 简体中文 | Yes | 1-3 | |
EUC_JP | Extended UNIX Code-JP | 日文 | Yes | 1-3 | |
EUC_KR | Extended UNIX Code-KR | 韩文 | Yes | 1-3 | |
EUC_TW | Extended UNIX Code-TW | 繁体中文,台湾 | Yes | 1-3 | |
GB18030 | 国家标准 | 中文 | No | 1-2 | |
GBK | 扩展国标 | 简体中文 | No | 1-2 | WIN936, Windows936 |
ISO_8859_5 | ISO 8859-5, ECMA 113 | Latin/Cyrillic | Yes | 1 | |
ISO_8859_6 | ISO 8859-6, ECMA 114 | Latin/Arabic | Yes | 1 | |
ISO_8859_7 | ISO 8859-7, ECMA 118 | Latin/Greek | Yes | 1 | |
ISO_8859_8 | ISO 8859-8, ECMA 121 | Latin/Hebrew | Yes | 1 | |
JOHAB | JOHA | Korean (Hangul) | Yes | 1-3 | |
KOI8 | KOI8-R(U) | Cyrillic | Yes | 1 | KOI8R |
LATIN1 | ISO 8859-1, ECMA 94 | Western European | Yes | 1 | ISO88591 |
LATIN2 | ISO 8859-2, ECMA 94 | Central European | Yes | 1 | ISO88592 |
LATIN3 | ISO 8859-3, ECMA 94 | South European | Yes | 1 | ISO88593 |
LATIN4 | ISO 8859-4, ECMA 94 | North European | Yes | 1 | ISO88594 |
LATIN5 | ISO 8859-9, ECMA 128 | Turkish | Yes | 1 | ISO88599 |
LATIN6 | ISO 8859-10, ECMA 144 | Nordic | Yes | 1 | ISO885910 |
LATIN7 | ISO 8859-13 | Baltic | Yes | 1 | ISO885913 |
LATIN8 | ISO 8859-14 | Celtic | Yes | 1 | ISO885914 |
LATIN9 | ISO 8859-15 | LATIN1 with Euro and accents | Yes | 1 | ISO885915 |
LATIN10 | ISO 8859-16, ASRO SR 14111 | Romanian | Yes | 1 | ISO885916 |
MULE_INTERNAL | Mule internal code | Multilingual Emacs | Yes | 1-4 | |
SJIS | Shift JIS | Japanese | No | 1-2 | Mskanji, ShiftJIS, WIN932, Windows932 |
SQL_ASCII | unspecified 2 | any | No | 1 | |
UHC | Unified Hangul Code | Korean | No | 1-2 | WIN949, Windows949 |
UTF8 | Unicode, 8-bit | all | Yes | 1-4 | Unicode |
WIN866 | Windows CP866 | Cyrillic | Yes | 1 | ALT |
WIN874 | Windows CP874 | Thai | Yes | 1 | |
WIN1250 | Windows CP1250 | Central European | Yes | 1 | |
WIN1251 | Windows CP1251 | Cyrillic | Yes | 1 | WIN |
WIN1252 | Windows CP1252 | Western European | Yes | 1 | |
WIN1253 | Windows CP1253 | Greek | Yes | 1 | |
WIN1254 | Windows CP1254 | Turkish | Yes | 1 | |
WIN1255 | Windows CP1255 | Hebrew | Yes | 1 | |
WIN1256 | Windows CP1256 | Arabic | Yes | 1 | |
WIN1257 | Windows CP1257 | Baltic | Yes | 1 | |
WIN1258 | Windows CP1258 | Vietnamese | Yes | 1 | ABC, TCVN, TCVN5712, VSCII |
Table 1. SeaboxMPP/SeaboxSQL数据库字符集
设置字符集¶
seabox init
/initdb
在初始化时设置SeaboxMPP/SeaboxSQL数据库系统的默认字符集。
默认字符集是UNICODE
或UTF8
。
除了用作系统范围的默认值之外,您还可以创建具有不同字符集的数据库。例如:
=> CREATE DATABASE korean WITH ENCODING 'EUC_KR';
重点: 虽然您可以为数据库指定所需的任何编码,但选择与您选择的语言环境不同的编码是不明智的。
LC_COLLATE
和LC_CTYPE
设置意味着特定的编码,并且依赖于区域设置的操作(例如排序)可能会错误解释处于不兼容编码的数据。
由于这些语言环境设置被seabox init
/initdb
冻结,因此在不同数据库中使用不同编码的明显的灵活性更具理论性而非实用性。
安全使用多种编码的一种方法是在初始化期间将语言环境设置为C
或POSIX
,从而禁用任何真实的语言环境感知。
服务器和客户端之间的字符集转换¶
SeaboxMPP/SeaboxSQL数据库支持服务器和客户端之间针对特定字符集组合的自动字符集转换,可参考Coordinator实例catalog表pg_conversion
。
SeaboxMPP/SeaboxSQL数据库附带了一些预定义的字符集转换,或者您可以使用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 |
Table 2. 客户端/服务器字符集转换
要启用自动字符集转换,须告诉SeaboxMPP/SeaboxSQL数据库要在客户端中使用的字符集(编码)。有几种方法可以实现此目的:
-
在
ssql
中使用\encoding
命令,它允许您动态更改客户端编码。 -
使用
SET
client_encoding TO
.要设置客户端编码,请使用以下SQL命令
=> SET CLIENT_ENCODING TO 'value';
要查询当前的客户端编码:
=> SHOW client_encoding;
要返回到默认编码:
=> RESET client_encoding;
-
使用
SDCLIENTENCODING
环境变量。在客户端环境中定义
SDCLIENTENCODING
时,将在与服务器建立连接时自动选择该客户端编码。 -
设置配置参数
client_encoding
。如果在Coordinator实例的seaboxsql.conf
文件中设置了client_encoding
,则在建立与SeaboxMPP/SeaboxSQL数据库的连接时会自动选择该客户端编码。
如果无法转换特定字符“假设您为服务器选择了EUC_JP
而对客户端选择了LATIN1
,那么某些日文字符在LATIN1
中没有表示”,则会报告错误。
如果客户端字符集定义为SQL_ASCII
,则无论服务器的字符集如何,都将禁用编码转换。除非使用all-ASCII数据,否则使用SQL_ASCII
是不明智的。
注:SQL_ASCII设置与其他设置的行为大不相同。字节值0-127根据ASCII标准进行解释,字节值128-255作为未解释的字符。如果使用任何非ASCII数据,则将SQL_ASCII设置用作客户端编码是不明智的。不支持SQL_ASCII作为服务器编码。