更新时间:2024-11-12 GMT+08:00
分享

区域和格式化

介绍时间格式设置的相关参数。

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一致的值。

设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。

设置建议:优先推荐使用ISO格式。

设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。

IntervalStyle

参数说明:设置区间值的显示格式。

参数类型:枚举类型

参数单位:

取值范围:

  • sql_standard:表示产生与SQL标准规定匹配的输出。
  • postgres:表示产生与PostgreSQL 8.4版本相匹配的输出,当DateStyle参数被设为ISO时有效。
  • postgres_verbose:表示产生与PostgreSQL 8.4版本相匹配的输出,当DateStyle参数被设为non_ISO时有效。
  • iso_8601:表示产生与在ISO 8601中定义的“格式与代号”相匹配的输出。
  • a:表示与numtodsinterval函数相匹配的输出结果,详细请参见《开发指南》文档的“SQL参考 > 函数和操作符 > 时间和日期处理函数和操作符”章节中的numtodsinterval内容。

IntervalStyle参数也会影响不明确的间隔输入的说明。

默认值:postgres

设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。

设置建议:推荐使用默认值。

设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。

TimeZone

参数说明:设置显示和解释时间类型数值时使用的时区。

参数类型:字符串

参数单位:

取值范围:可通过查询视图PG_TIMEZONE_NAMES查看取值范围,请参考《开发指南》文档的“系统表和系统视图 > 系统视图 > 其他系统视图 > PG_TIMEZONE_NAMES”章节。

默认值:"PRC"

  • gs_initdb将设置一个与其系统环境一致的时区值。
  • 在sql_compatibility兼容性参数设置为M,m_format_dev_version设置为's2'时,取值范围与time_zone一致。

设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。

设置建议:推荐使用默认值。

设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。

timezone_abbreviations

参数说明:设置服务器接受的时区缩写值。该参数可在PDB级别设置。

参数类型:字符串

参数单位:

取值范围:当前支持的取值有“India”、“Australia”、“Default”。

默认值:"Default"。在PDB场景内,若未设置该参数,则继承来自全局的设置。

“Default”表示通用时区的缩写,适合绝大部分情况。但也有其他诸如“Australia”和“India”等用来定义特定的安装。而除此之外的时区缩写,需要在创建数据库之前通过相应的配置文件进行设置。

设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。

设置建议:推荐使用默认值。

设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。

extra_float_digits

参数说明:这个参数为浮点数值调整显示的数据位数,浮点类型包括float4、float8以及几何数据类型。参数值加在标准的数据位数上(FLT_DIG或DBL_DIG,视情况而定)。该参数可在PDB级别设置。

参数类型:整型

参数单位:

取值范围:-15 ~ 3

  • 设置为正数时,表示包括部分关键的数据位。这个功能对转储那些需要精确恢复的浮点数据特别有用。
  • 设置为0或负数时,表示消除不需要的数据位。
  • M-Compatibility模式数据库下,extra_float_digits仅影响不带标度的float4数据类型显示的数据位数。float8数据类型及带标度的float4数据类型显示的数据位数不受该GUC影响。

默认值:0。在PDB场景内,若未设置该参数,则继承来自全局的设置。

设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。

设置建议:推荐使用默认值。

设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。

float_shortest_precision

参数说明:这个参数控制是否开启最小精度方法替代sprintf()来实现浮点数的序列化功能。该最小精度方法用于提升浮点数序列化系统函数的性能,即缩短float4out()和float8out()两个系统函数单线程的执行时间。多租场景下,该参数可在PDB级别设置。

参数类型:布尔型

参数单位:

取值范围:布尔型

  • on:表示开启最小精度方法。
  • off:表示不开启最小精度方法。

默认值:off。在PDB场景内,若未设置该参数,则继承来自全局的设置。

设置方式:该参数属于USERSET类型参数,请参考表 GUC参数分类中对应设置方法进行设置。

设置建议:建议新开局点或者对浮点序列化有性能诉求,可以设置此参数。

设置不当的风险与影响:该参数打开后,在extra_float_digits设置不同取值时,float有效数字的精度与未打开前有所差异,extra_float_digits的取值范围为[-15,3],每个取值需要的有效数字数量如下所示:

extra_float_digits的值

需要的有效数字数量

Float4

Float8

-15

1

1

-14

1

1

-13

1

2

-12

1

3

-11

1

4

-10

1

5

-9

1

6

-8

1

7

-7

1

8

-6

1

9

-5

1

10

-4

2

11

-3

3

12

-2

4

13

-1

5

14

0

6

15

1

7

16

2

8

17

3

9

18

  • 对于调用snprintf_s()的原逻辑来说,“需要的有效数字数量”并不代表输出的数字都是有效值。
    1. 当extra_float_digits>0 时,输出的数字不保证完全有效。
    2. 当extra_float_digits<=0 时,输出的数字保证完全有效。
  • 对于使用了最小精度方法的新逻辑来说,只输出有效数字。
    1. 当extra_float_digits>0 时,不保证输出的数字达到“需要的有效数字数量”,但是输出的都是有效数字。
    2. 当extra_float_digits<=0 时,输出的数字保证完全有效。

client_encoding

参数说明:设置客户端的字符编码类型。该参数可在PDB级别设置。

参数类型:字符串

参数单位:

取值范围:兼容PG所有的字符编码类型。其中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字符集升级前存入的历史数据,则存在以下情况:
    1. set client_encoding=gb18030时,UTF8数据库中的历史数据返回给客户端的字符编码与客户端字符集升级前保持一致,但字符集升级过程中发生映射关系改变的38个字符的字形显示与2022版本保持一致。
    2. set client_encoding=gb18030_2022时,UTF8数据库中的历史数据返回给客户端的字符编码与客户端字符集升级后保持一致,字形与升级前保持一致。这是因为GB18030字符集自身的各版本间存在不完全兼容,可能导致数据不一致。因此,若客户端涉及GB18030字符集升级且存在历史数据的场景,在升级前应进行历史数据的升级转换。
  • client_encoding支持设置为ZHS16GBK字符编码,下表展示了ZHS16GBK、GB18030、GB18030_2022字符集所有转换关系对应的server_encoding与client_encoding设置方式:

server_encoding

client_encoding

locale

设置方法

zhs16gbk

utf8

utf8

数据库自动获取locale取值。

utf8

zhs16gbk

gbk

  • gsql通过用户手动执行:set client_encoding = zhs16gbk。
  • JDBC连接时通过url参数直接指定:characterEncoding=zhs16gbk

zhs16gbk

zhs16gbk

gbk

  • gsql连接时数据库自动获取locale取值,内部进行处理后自动设置client_encoding = zhs16gbk。
  • JDBC连接时通过url参数直接指定:characterEncoding=zhs16gbk。

zhs16gbk

gb18030

gb18030

  • gsql连接时数据库自动获取locale取值。
  • JDBC连接时通过url参数直接指定:characterEncoding=gb18030。

gb18030

zhs16gbk

gbk

  • gsql不支持该设置。
  • JDBC连接时通过url参数直接指定characterEncoding=zhs16gbk。

zhs16gbk

gb18030-2022

gb18030

  • gsql连接时,用户手动执行:set client_encoding = gb18030_2022。
  • JDBC连接时通过url参数直接指定:characterEncoding=gb18030_2022。

gb18030-2022

zhs16gbk

gbk

  • gsql不支持该设置。
  • JDBC连接时通过url参数直接指定characterEncoding=zhs16gbk。

gb18030

utf8

utf8

数据库自动获取locale取值。

utf8

gb18030

gb18030

  • 数据库自动获取locale取值。
  • JDBC连接时通过url参数直接指定:characterEncoding=gb18030。

gb18030_2022

utf8

utf8

数据库自动获取locale取值。

utf8

gb18030_2022

gb18030

  • gsql连接时,用户手动执行:set client_encoding = gb18030_2022。
  • JDBC连接时通过url参数直接指定:characterEncoding=gb18030_2022。

gb18030

gb18030

gb18030

  • 数据库自动获取locale取值。
  • JDBC连接时通过url参数直接指定:characterEncoding=gb18030。

gb18030_2022

gb18030_2022

gb18030

  • gsql连接时数据库自动获取locale取值,内部进行处理后自动设置client_encoding = gb18030_2022。
  • JDBC连接时通过url参数直接指定:characterEncoding=gb18030_2022。

默认值:"UTF8"。在PDB场景内,若未设置该参数,则继承来自全局的设置。

设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。

设置建议:请根据前端业务的情况确定。尽量客户端编码和服务器端编码一致,提高效率。建议设置为“SQL_ASCII”或“UTF8”。

设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。

lc_messages

参数说明:设置信息显示的语言。该参数可在PDB级别设置。

参数类型:字符串

参数单位:

取值范围:取值范围与系统相关,可通过使用命令locale -a查看。

  • 使用命令locale -a查看当前系统支持的区域和相应的编码格式,并可以选择进行设置。
  • 在一些系统上,取值范围并不存在,不过仍然允许设置这个变量,只是不会有任何效果。同样,也有可能是所期望的语言的翻译信息不存在。在这种情况下,用户仍然能看到英文信息。
  • 默认情况下,gs_initdb会根据当前的系统环境初始化此参数,通过locale命令可以查看当前的配置环境。

默认值:"C"。在PDB场景内,若未设置该参数,则继承来自全局的设置。

设置方式:该参数属于SUSET类型参数,请参考表1中对应设置方法进行设置。

设置建议:推荐使用默认值。

设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。

lc_monetary

参数说明:设置货币值的显示格式,影响to_char()之类的函数的输出。该参数可在PDB级别设置。

参数类型:字符串

参数单位:

取值范围:取值范围与系统相关,可通过使用命令locale -a查看。

  • 使用命令locale -a查看当前系统支持的区域和相应的编码格式,并可以选择进行设置。
  • 默认情况下,gs_initdb会根据当前的系统环境初始化此参数,通过locale命令可以查看当前的配置环境。

默认值:"C"。在PDB场景内,若未设置该参数,则继承来自全局的设置。

设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。

设置建议:推荐使用默认值。

设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。

lc_numeric

参数说明:设置数值的显示格式,影响to_char之类的函数的输出。该参数可在PDB级别设置。

参数类型:字符串

参数单位:

取值范围:取值范围与系统相关,可通过使用命令locale -a查看。

  • 使用命令locale -a查看当前系统支持的区域和相应的编码格式,并可以选择进行设置。
  • 默认情况下,gs_initdb会根据当前的系统环境初始化此参数,通过locale命令可以查看当前的配置环境。

默认值:"C"。在PDB场景内,若未设置该参数,则继承来自全局的设置。

设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。

设置建议:推荐使用默认值。

设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。

lc_time

参数说明:设置时间和区域的显示格式,影响to_char()之类的函数的输出。该参数可在PDB级别设置。

参数类型:字符串

参数单位:

取值范围:取值范围与系统相关,可通过使用命令locale -a查看。

  • 使用命令locale -a查看当前系统支持的区域和相应的编码格式,并可以选择进行设置。
  • 默认情况下,gs_initdb会根据当前的系统环境初始化此参数,通过locale命令可以查看当前的配置环境。

默认值:"C"。在PDB场景内,若未设置该参数,则继承来自全局的设置。

设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。

设置建议:推荐使用默认值。

设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。

lc_time_names

参数说明:控制用于显示日期和月份名称及缩写的语言。影响DATE_FORMAT()、DAYNAME()以及MONTHNAME()函数输出结果。不影响STR_TO_DATE()和GET_FORMAT()的表现。该参数可在PDB级别设置。

参数类型:字符串

参数单位:

取值范围:参数应当为简易格式的IETF语言标记,例如en_US、zh_CN等。

默认值:"en_US"。在PDB场景内,若未设置该参数,则继承来自全局的设置。

设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。

设置建议:根据业务需要,切换合适的语言。

设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。

default_week_format

参数说明:用于week()函数的默认mode值,取值范围与表现如下表所示。该参数可在PDB级别设置。

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。

参数类型:整型

参数单位:

取值范围:-2147483648 ~ 2147483647

  • 当取值小于0时,会被强制调整为0。
  • 当取值大于7时,会被强制调整为7。

默认值:0。在PDB场景内,若未设置该参数,则继承来自全局的设置。

设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。

设置建议:根据业务需要,选择合适的mode。

设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。

相关文档