GaussDB(DWS)编码导入导出
【摘要】 一、编码之导入导出常见的字符编码: ASCII码、GBK、UTF8ASCII码总共规定了128个字符的编码,使用1个字节表示,最高位为0,通常可以表示阿拉伯数字、字母、字符等,十六进制编码小于80,具体查看如下ASCII码表。GBK编码使用2个字节表示,兼容ASCII同时,扩充了汉字、汉字部首符号、图形符号等。第二字节部分编码小于“80”,为了避免导入导出分隔符和eol与其他编码组合导致业务...
一、编码之导入导出
- 常见的字符编码: ASCII码、GBK、UTF8
- ASCII码总共规定了128个字符的编码,使用1个字节表示,最高位为0,通常可以表示阿拉伯数字、字母、字符等,十六进制编码小于80,具体查看如下ASCII码表。
- GBK编码使用2个字节表示,兼容ASCII同时,扩充了汉字、汉字部首符号、图形符号等。第二字节部分编码小于“80”,为了避免导入导出分隔符和eol与其他编码组合导致业务失败,delimiter与eol尽量使用小于“40”
- UTF8编码是一种变长的编码方式,可以使用1~4个字节表示一个字符,根据不同的符号而变化字节长度,DWS的utf8编码最多占3字节。除了单字节编码,多字节编码都是大于等于”80”
二、编码使用场景
数据库编码,导入/导出时指定编码,数据库客户端(这个对用户展示数据有影响,一般情况默认为utf8)
- 编码之查询,分别连接gbk和utf8数据库,查询汉字,字母,观察对应的十六进制编码。
select '中','中'::bytea,'?','?'::bytea;
三、编码之导入导出
- 数据库和导入导出时指定encoding一致,不会做编码转换
- 数据库和导入编码不一致,假如数据库编码为utf8,copy/gds指定的encoding为gbk,数据入库时会由gbk转utf8编码
- 实验如下:
1)Gbk数据库导出数据为gbk/utf8时,可以看到”中”对应的编码分别是gbk和utf8
2)GBK数据库导入gbk/utf8数据,数据入库查看十六进制编码为gbk编码。
- gds/copy导入时,可以指定eol,如果参数内容包含多字节字符,导入encoding尽量选择与数据库编码一致。导出时指定eol为汉字“国”,utf8编码”e59bbd”,gbk编码“b9fa”
注意:这里导入utf8数据到gbk数据库时,数据库根据“b9fa”换行,读取数据文件的一行数据,因为源数据没有“b9fa”,所以将所有内容读为一行,分隔符默认为制表符,即“09”。分割出来的数据超过表定义的列,所以报错。
- gds导入conflict_delimiter参数,copy不支持此参数,效果与gds此参数设置为false一致。
假如数据编码为gbk,外表定义为utf8,conflict_delimiter为true时,数据库将utf8的数据以gbk编码读取,不做转码操作;conflict_delimiter为flase时,数据库将读取utf8的数据转为gbk编码,根据delimiter进行拆分。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)