文章目录
- 环境
- 症状
- 问题原因
- 解决方案
环境
系统平台:
版本:4.3.2
症状
命令描述:COPY 在表和文件之间拷贝数据。COPYTO 把一个表的所有内容都拷贝到一个文件,而 COPY FROM 从一个文件里拷贝数据到一个表里(把数据附加到表中原数据)。COPYTO 还能拷贝 SELECT 查询的结果。
问题描述:当使用copy from命令时,出现错误,错误信息:invalid byte sequence for encoding “UTF8”: 0x00
问题原因
原因是客户端字符集和插入内容的字符集不匹配。PostgreSQL默认不做字符集转换,如果数据库是UTF8的字符集,一般终端的中文字符集会设置为GBK(可以看LANG环境变量确认),所以这个编码不经转换的存入数据库中,而数据库是UTF8的,PostgreSQL发现不是UTF8编码,就报上面的错。
要想打开自动字符集转换功能,必须告诉 pg 客户端使用的字符集。这时可以设置pg客户端编码为GBK,pg就会自动做字符集转换。
解决方案
将目标文档存为utf-8格式,和改为csv格式后缀;
设置客户端编码:set client_encoding=‘GBK’;
这两步之后,上述问题解决。
表格文件通常有表头,所以在输入命令时要加上选项header:输出包含列名,输入忽略列名,仅csv格式,所以文件同时要改为csv后缀。