区域和格式化
介绍时间格式设置的相关参数。
DateStyle
参数说明:设置日期和时间值的显示格式,以及有歧义的输入值的解析规则。
这个变量包含两个独立的加载部分:输出格式声明(ISO、Postgres、SQL、German)和输入输出的年/月/日顺序(DMY、MDY、YMD、Euro、European、US、NonEuro、NonEuropean、Default)。两个部分可以独立设置或者一起设置。关键字Euro和European等价于DMY;关键字US、NonEuro、NonEuropean等价于MDY 。
参数类型:字符串
参数单位:无
取值范围:输出格式声明与输入输出的年/月/日顺序的排列组合(两个部分也可以单独设置)。
- 输出格式声明:ISO、Postgres、SQL、German
- 输入输出的年/月/日顺序:DMY(Euro、European)、MDY(US、NonEuro、NonEuropean)、YMD
默认值:"ISO, MDY"
gs_initdb会将这个参数初始化成与lc_time一致的值。
该参数通过执行gs_guc reload修改时,如果当前节点上的某个session的连接不是来自于客户端,而是来自于该节点所属集群上的其他节点,那么执行gs_guc reload后该参数在该session上不会立即生效,需与连接节点断开连接后重新连接才会生效。
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:优先推荐使用ISO格式。
IntervalStyle
参数说明:设置区间值的显示格式。
该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。
取值范围:枚举类型
- sql_standard表示产生与SQL标准规定匹配的输出。
- postgres表示产生与PostgreSQL 8.4版本相匹配的输出,当DateStyle参数被设为ISO时。
- postgres_verbose表示产生与PostgreSQL 8.4版本相匹配的输出,当DateStyle参数被设为non_ISO时。
- iso_8601表示产生与在ISO 8601中定义的“格式与代号”相匹配的输出。
- oracle表示产生于Oracle数据库中与numtodsinterval函数相匹配的输出结果,详细请参考《开发指南》的“SQL参考 > 函数和操作符 > 时间和日期处理函数和操作符”章节中的numtodsinterval内容。
IntervalStyle参数也会影响不明确的间隔输入的说明。
若该参数通过执行gs_guc reload修改时,如果当前节点上的某个session的连接不是来自于客户端,而是来自于该节点所属集群上的其他节点,那么执行gs_guc reload后该参数在该session上不会立即生效,需与连接节点断开连接后重新连接才会生效。
默认值:postgres
TimeZone
参数说明:设置显示和解释时间类型数值时使用的时区。
参数类型:字符串
参数单位:无
取值范围:可查询视图PG_TIMEZONE_NAMES,请参见《开发指南》的“系统表和系统视图 > 系统视图 > PG_TIMEZONE_NAMES”章节。
默认值:
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:设置为默认值。
gs_initdb将设置一个与其系统环境一致的时区值。
该参数通过执行gs_guc reload修改时,如果当前节点上的某个session的连接不是来自于客户端,而是来自于该节点所属集群上的其他节点,那么执行gs_guc reload后该参数在该session上不会立即生效,需与连接节点断开连接后重新连接才会生效。
timezone_abbreviations
参数说明:设置服务器接受的时区缩写值。
该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。
取值范围:字符串。India,Australia,Default。
默认值:Default
Default表示通用时区的缩写。但也有其他诸如 'Australia' 和 'India' 等用来定义特定的安装。
extra_float_digits
参数说明:这个参数为浮点数值调整显示的数据位数,浮点类型包括float4、float8 以及几何数据类型。参数值加在标准的数据位数上(FLT_DIG或DBL_DIG中合适的)。
该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。
取值范围:整型,-15~3
- 设置为3,表示包括部分关键的数据位。这个功能对转储那些需要精确恢复的浮点数据特别有用。
- 设置为负数,表示消除不需要的数据位。
默认值:0
client_encoding
参数说明:设置客户端的字符编码类型。
请根据前端业务的情况确定。尽量客户端编码和服务器端编码一致,提高效率。
该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。
取值范围:兼容PostgreSQL所有的字符编码类型。其中UTF8表示使用数据库的字符编码类型。
- 使用命令locale -a查看当前系统支持的区域和相应的编码格式,并可以选择进行设置;不同操作系统之间,或者相同操作系统的不同版本之间,排序规则可能存在差异和变化。当应用业务在上述这些操作系统之间进行逻辑迁移时,操作系统排序规则的差异和变化可能会导致索引、分区、排序算子等数据库功能行为的差异,如相同的范围查询语句返回的数据结果集不同、相同的排序查询语句返回的查询结果不同等。应用业务需要根据操作系统发布的locale差异,在业务上排查业务数据是否涉及相关的字符。
- 默认情况下,gs_initdb会根据当前的系统环境初始化此参数,通过locale命令可以查看当前的配置环境。
- 参数建议保持默认值,不建议通过gs_guc工具或其他方式直接在gaussdb.conf文件中设置client_encoding参数,即使设置也不会生效,以保证集群内部通信编码格式一致。
- client_encoding支持设置为GB18030_2022字符编码,当client_encoding=gb18030_2022时,需要保证客户端操作系统支持的GB18030字符集已升级到2022版本。
- 当数据库字符集编码为UTF8,且当前系统支持的区域下相应的编码格式为GB18030时,若客户端操作系统支持的GB18030字符集已升级到2022版本,且数据库中存在客户端GB18030字符集升级前存入的历史数据,则存在以下情况:
- set client_encoding = gb18030时,UTF8数据库中的历史数据返回给客户端的字符编码与客户端字符集升级前保持一致,但字符集升级过程中发生映射关系改变的38个字符的字形显示与2022版本保持一致。
- set client_encoding = gb18030_2022时,UTF8数据库中的历史数据返回给客户端的字符编码与客户端字符集升级后保持一致,字形与升级前保持一致。这是因为GB18030字符集自身的各版本间存在不完全兼容,可能导致数据的不一致性。因此,若客户端涉及GB18030字符集升级且存在历史数据的场景,在升级前应进行历史数据的升级转换。
- client_encoding支持设置为ZHS16GBK字符编码,下表展示了ZHS16GBK、GB18030、GB18030_2022字符集所有转换关系对应的server_encoding与client_encoding设置方式:
server_encoding |
server_encoding |
locale |
设置方法 |
---|---|---|---|
zhs16gbk |
utf8 |
utf8 |
数据库自动获取locale取值。 |
utf8 |
zhs16gbk |
gbk |
|
zhs16gbk |
zhs16gbk |
gbk |
|
zhs16gbk |
gb18030 |
gb18030 |
|
gb18030 |
zhs16gbk |
gbk |
|
zhs16gbk |
gb18030-2022 |
gb18030 |
|
gb18030-2022 |
zhs16gbk |
gbk |
|
gb18030 |
utf8 |
utf8 |
数据库自动获取locale取值。 |
utf8 |
gb18030 |
gb18030 |
|
gb18030_2022 |
utf8 |
utf8 |
数据库自动获取locale取值。 |
utf8 |
gb18030_2022 |
gb18030 |
|
gb18030 |
gb18030 |
gb18030 |
|
gb18030_2022 |
gb18030_2022 |
gb18030 |
|
默认值:UTF8
推荐值:SQL_ASCII/UTF8
lc_messages
参数说明:设置信息显示的语言。
- 可接受的值是与系统相关的。
- 在一些系统上,这个区域范畴并不存在,不过仍然允许设置这个变量,只是不会有任何效果。同样,也有可能是所期望的语言的翻译信息不存在。在这种情况下,用户仍然能看到英文信息。
该参数属于SUSET类型参数,请参考表1中对应设置方法进行设置。
取值范围:字符串
- 使用命令locale -a查看当前系统支持的区域和相应的编码格式,并可以选择进行设置。
- 默认情况下,gs_initdb会根据当前的系统环境初始化此参数,通过locale命令可以查看当前的配置环境。
默认值:C
lc_monetary
参数说明:设置货币值的显示格式,影响to_char之类的函数的输出。可接受的值是系统相关的。
该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。
取值范围:字符串
- 使用命令locale -a查看当前系统支持的区域和相应的编码格式,并可以选择进行设置。
- 默认情况下,gs_initdb会根据当前的系统环境初始化此参数,通过locale命令可以查看当前的配置环境。
- 若该参数通过执行gs_guc reload修改时,如果当前节点上的某个session的连接不是来自于客户端,而是来自于该节点所属集群上的其他节点,那么执行gs_guc reload后该参数在该session上不会立即生效,需与连接节点断开连接后重新连接才会生效。
默认值:C
lc_numeric
参数说明:设置数值的显示格式,影响to_char之类的函数的输出。可接受的值是系统相关的。
该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。
取值范围:字符串
- 使用命令locale -a查看当前系统支持的区域和相应的编码格式,并可以选择进行设置。
- 默认情况下,gs_initdb会根据当前的系统环境初始化此参数,通过locale命令可以查看当前的配置环境。
- 若该参数通过执行gs_guc reload修改时,如果当前节点上的某个session的连接不是来自于客户端,而是来自于该节点所属集群上的其他节点,那么执行gs_guc reload后该参数在该session上不会立即生效,需与连接节点断开连接后重新连接才会生效。
默认值:C
lc_time
参数说明:设置时间和区域的显示格式,影响to_char之类的函数的输出。可接受的值是系统相关的。
该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。
取值范围:字符串
- 使用命令locale -a查看当前系统支持的区域和相应的编码格式,并可以选择进行设置。
- 默认情况下,gs_initdb会根据当前的系统环境初始化此参数,通过locale命令可以查看当前的配置环境。
- 若该参数通过执行gs_guc reload修改时,如果当前节点上的某个session的连接不是来自于客户端,而是来自于该节点所属集群上的其他节点,那么执行gs_guc reload后该参数在该session上不会立即生效,需与连接节点断开连接后重新连接才会生效。
默认值:C
lc_time_names
参数说明:控制用于显示日期和月份名称及缩写的语言。影响DATE_FORMAT()、DAYNAME()以及MONTHNAME()函数输出结果。不影响STR_TO_DATE()和GET_FORMAT()的表现。
参数类型:字符串
参数单位:无
取值范围:参数应当为简易格式的IETF语言标记,例如en_US、zh_CN等。
默认值:en_US
设置方式:该参数属于USERSET类型参数,请参考设置参数中对应设置方法进行设置
设置建议:根据业务需要,切换合适的语言。
default_week_format
参数说明:用于week()函数的默认mode值,取值范围与表现如下表所示。
default_week_format |
一周的第一天 |
范围 |
第1周定义 |
---|---|---|---|
0 |
周日 |
0~53 |
今年第一个有周日的周。 |
1 |
周一 |
0~53 |
今年第一个有4天及以上的周。 |
2 |
周日 |
1~53 |
今年第一个有周日的周。 |
3 |
周一 |
1~53 |
今年第一个有4天及以上的周。 |
4 |
周日 |
0~53 |
今年第一个有4天及以上的周。 |
5 |
周一 |
0~53 |
今年第一个有周一的周。 |
6 |
周日 |
1~53 |
今年第一个有4天及以上的周。 |
7 |
周一 |
1~53 |
今年第一个有周一的周。 |
一年的第1周,其中的1代表序号值。根据week_format不同,如第三列所示,一年的第一个周序号可能为0。
参数类型:整型
参数单位:无
取值范围:[0, 7]
默认值:0
设置方式:该参数属于USERSET类型参数,请参考设置参数中对应设置方法进行设置
设置建议:根据业务需要,选择合适的mode。