云数据库 GAUSSDB-区域和格式化:client_encoding

时间:2024-11-13 14:45:18

client_encoding

参数说明:设置客户端的字符编码类型。

参数类型:字符串

参数单位:

取值范围:兼容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"

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

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

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

support.huaweicloud.com/distributed-devg-v8-gaussdb/gaussdb-10-0298.html