GBASE 8C——SQL参考4 字符集支持

本文详细介绍了各种字符集,如BIG5、EUC_JP、GBK等,以及它们的语言支持、字节长度和是否适用于服务器端。同时,讲解了如何在数据库初始化时设置默认编码,如通过`initdb`命令。此外,讨论了服务器与客户端之间的字符集转换,展示了不同服务器编码下支持的客户端编码。对于数据库管理员和开发者来说,理解这些概念对于确保跨平台数据的正确性和一致性至关重要。
    1. 字符集支持
      1. 支持的字符集

名称

描述

语言

是否服务器端?

ICU

字节/字符

别名

BIG5

Big Five

繁体中文

1-2

WIN950, Windows950

EUC_CN

扩展UNIX编码-中国

简体中文

1-3

EUC_JP

扩展UNIX编码-日本

日文

1-3

EUC_JIS_2004

扩展UNIX编码-日本, JIS X 0213

日文

1-3

EUC_KR

扩展UNIX编码-韩国

韩文

1-3

EUC_TW

扩展UNIX编码-台湾

繁体中文,台湾话

1-3

GB18030

国家标准

中文

1-4

GBK

扩展国家标准

简体中文

1-2

WIN936, Windows936

ISO_8859_5

ISO 8859-5, ECMA 113

拉丁语/西里尔语

1

ISO_8859_6

ISO 8859-6, ECMA 114

拉丁语/阿拉伯语

1

ISO_8859_7

ISO 8859-7, ECMA 118

拉丁语/希腊语

1

ISO_8859_8

ISO 8859-8, ECMA 121

拉丁语/希伯来语

1

JOHAB

JOHAB

韩语

1-3

KOI8R

KOI8-R

西里尔语(俄语)

1

KOI8

KOI8U

KOI8-U

西里尔语(乌克兰语)

1

LATIN1

ISO 8859-1, ECMA 94

西欧

1

ISO88591

LATIN2

ISO 8859-2, ECMA 94

中欧

1

ISO88592

LATIN3

ISO 8859-3, ECMA 94

南欧

1

ISO88593

LATIN4

ISO 8859-4, ECMA 94

北欧

1

ISO88594

LATIN5

ISO 8859-9, ECMA 128

土耳其语

1

ISO88599

LATIN6

ISO 8859-10, ECMA 144

日耳曼语

1

ISO885910

LATIN7

ISO 8859-13

波罗的海

1

ISO885913

LATIN8

ISO 8859-14

凯尔特语

1

ISO885914

LATIN9

ISO 8859-15

带欧罗巴和口音的LATIN1

1

ISO885915

LATIN10

ISO 8859-16, ASRO SR 14111

罗马尼亚语

1

ISO885916

MULE_INTERNAL

Mule内部编码

多语种编辑器

1-4

SJIS

Shift JIS

日语

1-2

Mskanji, ShiftJIS, WIN932, Windows932

SHIFT_JIS_2004

Shift JIS, JIS X 0213

日语

1-2

SQL_ASCII

未指定(见文本)

任意

1

UHC

统一韩语编码

韩语

1-2

WIN949, Windows949

UTF8

Unicode, 8-bit

所有

1-4

Unicode

WIN866

Windows CP866

西里尔语

1

ALT

WIN874

Windows CP874

泰语

1

WIN1250

Windows CP1250

中欧

1

WIN1251

Windows CP1251

西里尔语

1

WIN

WIN1252

Windows CP1252

西欧

1

WIN1253

Windows CP1253

希腊语

1

WIN1254

Windows CP1254

土耳其语

1

WIN1255

Windows CP1255

希伯来语

1

WIN1256

Windows CP1256

阿拉伯语

1

WIN1257

Windows CP1257

波罗的海

1

WIN1258

Windows CP1258

越南语

1

ABC, TCVN, TCVN5712, VSCII

      1. 设置字符集

initdb定义数据库默认字符集/编码,例如:

initdb -E GKR

可以用--encoding代替-E。如果没有给出-E或者--encoding选项,initdb会尝试基于指定的或者默认的区域判断要使用的合适编码。

使用非默认字符集/编码时,应考虑其与所选择的区域兼容:

createdb -E EUC_KR -T template0 --lc-collate=ko_KR.euckr --lc-ctype=ko_KR.euckr korean

或使用SQL命令实现:

CREATE DATABASE korean WITH ENCODING 'GB18030' LC_COLLATE='ko_KR.euckr' LC_CTYPE='ko_KR.euckr' TEMPLATE=template0;

数据库的字符集/编码存储在系统目录pg_database中。可以使用gsql -l选项或者\l命令进行查看。

gsql -l

                               List of databases

    Name     | Owner | Encoding |   Collate   |    Ctype    | Access privileges

-------------+-------+----------+-------------+-------------+-------------------

 gbase       | gbase | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 |

 korean      | gbase | EUC_KR   | ko_KR.euckr | ko_KR.euckr |

 template0   | gbase | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 | =c/gbase         +

             |       |          |             |             | gbase=CTc/gbase

 template1   | gbase | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 | =c/gbase         +

             |       |          |             |             | gbase=CTc/gbase

(4 rows)

      1. 服务器与客户端之间的自动字符集转换

服务器字符集

可用的客户端字符集

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

UTF8

GBK

不支持作为一个服务器编码

ISO_8859_5

ISO_8859_5, KOI8R, 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

KOI8R

KOI8R, ISO_8859_5, MULE_INTERNAL, UTF8, WIN866, WIN1251

KOI8U

KOI8U, UTF8

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, KOI8R, LATIN1 to LATIN4, SJIS, WIN866, WIN1250, WIN1251

SJIS

不支持作为一个服务器编码

SQL_ASCII

任意(不会执行任何转换)

UHC

不支持作为一个服务器编码

UTF8

所有支持的编码

WIN866

WIN866, ISO_8859_5, KOI8R, MULE_INTERNAL, UTF8, WIN1251

WIN874

WIN874, UTF8

WIN1250

WIN1250, LATIN2, MULE_INTERNAL, UTF8

WIN1251

WIN1251, ISO_8859_5, KOI8R, 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

启用自动字符集转换功能,需要告知数据库客户端使用的字符集/编码:

  1. 用gsql里的\encoding命令。例如,把编码改变为SJIS:

\encoding SJIS

  1. libpq中提供函数控制客户端编码。
  2. 使用SET client_encoding TO设置客户端编码:

SET CLIENT_ENCODING TO 'value';

或者使用SQL的SET NAMES:

SET NAMES 'value';

查询当前客户端编码:

SHOW client_encoding;

重置为缺省编码:

RESET client_encoding;

  1. 使用PGCLIENTENCODING。如果在客户端的环境里定义了PGCLIENTENCODING环境变量, 那么在与服务器进行了连接后将自动选择客户端编码(这个设置随后可以用上文提到的任何其他方法重载)。

使用client_encoding配置变量。如果client_encoding变量被设置,那么在与服务器建立了连接之后,这个客户端编码将备自动选定(这个设置随后可以用上文提到的方法重载)。

<think>嗯,用户这次明确要求查找GBase 8c创建数据库的语句,虽然提供的三条引用都与创建用户相关,但核心需求很清晰。用户可能正在部署新项目需要建库,或是学习数据库管理的基础操作。 注意到上次对话中我已经详细介绍过UPDATE语法、PL/SQL结构和用户管理,但创建数据库属于更基础的DDL操作。根据我对GBase 8c的了解,其CREATE DATABASE语法与PostgreSQL高度兼容,不过要特别注意两点:1) 系统默认的template0/template1模板库机制 2) OWNER子句的权限控制逻辑。 用户提供的引用[1]提到gs_dump工具,侧面印证了数据库对象管理的重要性——新建的数据库很可能未来需要导出备份。引用[2][3]虽然讲用户创建,但说明权限体系是联动的,建库时指定所属者就需要用到CREATE ROLE创建的账号。 考虑到用户连续问语法问题,应该是系统管理员或开发人员。我决定在回答中强化三个实操细节:1) 连接postgres系统库的必要性 2) 字符集设置场景 3) 表空间管理这种进阶用法。这样既解决基础问题,又预留扩展空间。 最后生成的相关问题要体现知识递进性:从单库创建→权限控制→批量管理,正好覆盖数据库生命周期。特别加入"并发创建"这个生产环境常见痛点,因为用户如果接触大型部署肯定会遇到。 </think>在 GBase 8c 中创建数据库需使用标准的 PostgreSQL 兼容语法(因其基于 PostgreSQL 内核),以下是核心语句及详解: ### 📌 创建数据库基础语法 ```sql CREATE DATABASE 数据库名称 [ [ WITH ] [ OWNER = 所属角色名 ] [ TEMPLATE = 模板库名 ] [ ENCODING = 字符集 ] [ LC_COLLATE = 排序规则 ] [ LC_CTYPE = 字符分类 ] [ TABLESPACE = 表空间名 ] [ ALLOW_CONNECTIONS = 是否允许连接 ] [ CONNECTION LIMIT = 最大连接数 ] [ IS_TEMPLATE = 是否作为模板 ] ]; ``` ### 🔍 关键参数说明 | **参数** | **作用** | **示例值** | |-----------------------|--------------------------------------------------------------------------|--------------------------| | `OWNER` | 指定数据库所有者(需提前通过 `CREATE ROLE` 创建用户/角色)[^3] | `OWNER = admin_user` | | `TEMPLATE` | 指定克隆模板(默认为 `template1`;`template0` 为纯净模板) | `TEMPLATE = template0` | | `ENCODING` | 设置字符集(如 `UTF8`、`GBK`) | `ENCODING = 'UTF8'` | | `LC_COLLATE`/`LC_CTYPE` | 指定排序规则和字符分类(需与字符集兼容) | `LC_COLLATE = 'zh_CN.utf8'` | | `TABLESPACE` | 关联表空间(需提前创建) | `TABLESPACE = fast_ssd` | | `CONNECTION LIMIT` | 限制最大并发连接数(`-1` 表示无限制) | `CONNECTION LIMIT = 100` | ### 💻 操作步骤示例 1. **连接系统库**(需管理员权限): ```bash gsql -d postgres -U gbase_admin ``` 2. **执行建库语句**: ```sql CREATE DATABASE sales_db OWNER = sales_manager ENCODING = 'UTF8' LC_COLLATE = 'zh_CN.utf8' LC_CTYPE = 'zh_CN.utf8' CONNECTION LIMIT 50; ``` 3. **验证结果**: ```sql \l -- 查看所有数据库列表 \c sales_db -- 切换到新库 ``` > ️ **注意** > - 若自定义字符集,需确保操作系统支持对应的语言环境[^1] > - 权限控制需同步配置:新库默认仅所有者具备 `CREATE` 权限,其他角色需通过 `GRANT` 授权[^3] --- ### 🔄 扩展应用场景 1. **克隆数据库**(基于现有库创建): ```sql CREATE DATABASE sales_db_backup TEMPLATE sales_db; ``` 2. **创建只读模板库**: ```sql CREATE DATABASE readonly_template IS_TEMPLATE = true ALLOW_CONNECTIONS = false; ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值