暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

GaussDB数据库设计规范

uuuu 2023-08-16
175
  • 使用JDBC客户端连接数据库时必须指明数据库名,具体格式为:
    jdbc:postgresql://host:port/database?param1=value1&param2=value2


  • JDBC实例一旦创建,无法进行数据库切换。
  • 数据库目前不支持不区分大小写的排序方式。
  • 目前仅支持对数据库定义字符集,不支持对表、字段等其他对象定义字符集。
  • 业务使用前必须先创建业务数据库。

    说明:

    不应使用数据库安装后默认创建的postgres数据库存储业务数据。

  • 创建数据库时必须指定字符集为UTF8,创建数据库时必须选择与客户端统一的编码字符集。

    为了使用全球化需求,数据库编码应能够存储与标识绝大多数的字符,因此推荐使用UTF8。GaussDB中的UTF8字符集与MySQL的UTF8MB4等价,能够支持emoji表情字符。

    如果客户端的编码方式与数据库的编码方式不统一,会带来转码性能,同时,针对同编码的内核优化无法触发,影响查询效率。

    客户端的编码字符集需通过以下方式修改:

    • 设置客户端连接参数,例如JDBC连接参数可通过在URL中追加characterEncoding和allowEncodingChanges参数
      jdbc:postgresql://ip:port/database_name?characterEncoding=utf8&allowEncodingChanges=true


    • 修改数据库GUC参数
      SET client_encoding = 'UTF8';


    • 数据库的编码在CREATE DATABASE时进行设置。
      CREATE DATABASE tester WITH ENCODING = 'UTF8';


  • 数据库一旦创建无法更改字符集。
  • 从便捷性和资源共享效率上考虑,建议使用SCHEMA进行业务隔离。

    说明:

    GaussDB可以使用DATABASE和SCHEMA两种方式实现业务的隔离。

    区别在于DATABASE的隔离更加彻底,各个DATABASE之间共享资源极少,可实现连接隔离、权限隔离等。

    但DATABASE之间无法互相访问,JDBC建连时必须指明DATABASE,连接后无法切换DATABASE。

    SCHEMA隔离的方式共用资源较多,可以通过GRANT与REVOKE语法便捷地控制不同用户对各SCHEMA及其下属对象的权限。

  • 创建数据库时建议指定LC_COLLATE和LC_CTYPE和存放的数据内容语言(中文\英文\等等)一致,该参数将影响数据的排序顺序。默认会用系统当前环境变量的默认设置。

    示例:

    CREATE DATABASE tester WITH ENCODING = 'UTF8' LC_COLLATE = 'en_US.UTF-8' LC_CTYPE = 'en_US.UTF-8';


    LC_COLLATE:用于明确字符排序规则。

    • 使用JDBC客户端连接数据库时必须指明数据库名,具体格式为:
      jdbc:postgresql://host:port/database?param1=value1&param2=value2
    • JDBC实例一旦创建,无法进行数据库切换。
    • 数据库目前不支持不区分大小写的排序方式。
    • 目前仅支持对数据库定义字符集,不支持对表、字段等其他对象定义字符集。
    • 业务使用前必须先创建业务数据库。
      说明:

      不应使用数据库安装后默认创建的postgres数据库存储业务数据。

    • 创建数据库时必须指定字符集为UTF8,创建数据库时必须选择与客户端统一的编码字符集。

      为了使用全球化需求,数据库编码应能够存储与标识绝大多数的字符,因此推荐使用UTF8。GaussDB中的UTF8字符集与MySQL的UTF8MB4等价,能够支持emoji表情字符。

      如果客户端的编码方式与数据库的编码方式不统一,会带来转码性能,同时,针对同编码的内核优化无法触发,影响查询效率。

      客户端的编码字符集需通过以下方式修改:

      • 设置客户端连接参数,例如JDBC连接参数可通过在URL中追加characterEncoding和allowEncodingChanges参数
        jdbc:postgresql://ip:port/database_name?characterEncoding=utf8&allowEncodingChanges=true
      • 修改数据库GUC参数
        SET client_encoding = 'UTF8';
      • 数据库的编码在CREATE DATABASE时进行设置。
        CREATE DATABASE tester WITH ENCODING = 'UTF8';
    • 数据库一旦创建无法更改字符集。
    • 从便捷性和资源共享效率上考虑,建议使用SCHEMA进行业务隔离。
      说明:

      GaussDB可以使用DATABASE和SCHEMA两种方式实现业务的隔离。

      区别在于DATABASE的隔离更加彻底,各个DATABASE之间共享资源极少,可实现连接隔离、权限隔离等。

      但DATABASE之间无法互相访问,JDBC建连时必须指明DATABASE,连接后无法切换DATABASE。

      SCHEMA隔离的方式共用资源较多,可以通过GRANT与REVOKE语法便捷地控制不同用户对各SCHEMA及其下属对象的权限。

    • 创建数据库时建议指定LC_COLLATE和LC_CTYPE和存放的数据内容语言(中文\英文\等等)一致,该参数将影响数据的排序顺序。默认会用系统当前环境变量的默认设置。

      示例:

      CREATE DATABASE tester WITH ENCODING = 'UTF8' LC_COLLATE = 'en_US.UTF-8' LC_CTYPE = 'en_US.UTF-8';

      LC_COLLATE:用于明确字符排序规则。

    • LC_COLLATE=C
      1
      2
      3
      A
      B
      C
      a  --注:小写在大写后面,按ASCII码排序
      b
      c 
       
      en_US.UTF-8
      1
      2
      3
      a  --注:按字符排序
      A
      b
      B
      c
      C
       
      zh_CN.UTF-8
      1
      2
      3
      a
      A
      b
      B
      c
      C
      
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论