GaussDB(DWS)编码导入导出

举报
ACBD 发表于 2021/12/31 10:32:39 2021/12/31
【摘要】 一、编码之导入导出常见的字符编码: ASCII码、GBK、UTF8ASCII码总共规定了128个字符的编码,使用1个字节表示,最高位为0,通常可以表示阿拉伯数字、字母、字符等,十六进制编码小于80,具体查看如下ASCII码表。GBK编码使用2个字节表示,兼容ASCII同时,扩充了汉字、汉字部首符号、图形符号等。第二字节部分编码小于“80”,为了避免导入导出分隔符和eol与其他编码组合导致业务...

一、编码之导入导出

  • 常见的字符编码: ASCII码、GBKUTF8
  • ASCII码总共规定了128个字符的编码,使用1个字节表示,最高位为0,通常可以表示阿拉伯数字、字母、字符等,十六进制编码小于80,具体查看如下ASCII码表。
  • GBK编码使用2个字节表示,兼容ASCII同时,扩充了汉字、汉字部首符号、图形符号等。第二字节部分编码小于“80”,为了避免导入导出分隔符和eol与其他编码组合导致业务失败,delimiter与eol尽量使用小于“40”
  • UTF8编码是一种变长的编码方式,可以使用1~4个字节表示一个字符,根据不同的符号而变化字节长度,DWSutf8编码最多占3字节。除了单字节编码,多字节编码都是大于等于”80”

二、编码使用场景

数据库编码,导入/导出时指定编码,数据库客户端(这个对用户展示数据有影响,一般情况默认为utf8

  • 编码之查询,分别连接gbkutf8数据库,查询汉字,字母,观察对应的十六进制编码。

select '',''::bytea,'?','?'::bytea;

三、编码之导入导出

  • 数据库和导入导出时指定encoding一致,不会做编码转换
  • 数据库和导入编码不一致,假如数据库编码为utf8copy/gds指定的encodinggbk,数据入库时会由gbkutf8编码
  • 实验如下:

1Gbk数据库导出数据为gbk/utf8时,可以看到对应的编码分别是gbkutf8

2GBK数据库导入gbk/utf8数据,数据入库查看十六进制编码为gbk编码。

  • gds/copy导入时,可以指定eol,如果参数内容包含多字节字符,导入encoding尽量选择与数据库编码一致。导出时指定eol为汉字“国”,utf8编码”e59bbd”gbk编码“b9fa

注意:这里导入utf8数据到gbk数据库时,数据库根据“b9fa”换行,读取数据文件的一行数据,因为源数据没有“b9fa”,所以将所有内容读为一行,分隔符默认为制表符,即“09”。分割出来的数据超过表定义的列,所以报错。

  • gds导入conflict_delimiter参数,copy不支持此参数,效果与gds此参数设置为false一致。

假如数据编码为gbk,外表定义为utf8conflict_delimitertrue时,数据库将utf8的数据以gbk编码读取,不做转码操作;conflict_delimiterflase时,数据库将读取utf8的数据转为gbk编码,根据delimiter进行拆分。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。