设为首页 收藏本站
查看: 4229|回复: 0

[经验分享] PostgreSQL: 如何处理导出的数据中文显示乱码问题?

[复制链接]

尚未签到

发表于 2016-11-20 12:44:28 | 显示全部楼层 |阅读模式
在数据库维护过程中,经常有需求导出生产库的部分数据,并且要求将数据保存为
Excel 形式, 对于 Oracle 来说,这是非常简单的工作,因为有 plsqldev 等图形化工具,
且功能非常强大,可以导出 Excel, 对于 PG 来说,这方面的支持就少了,首先图形化界面
工具少,另外常用的PG GUI工具 pgadmin 功能非常简单,没有导出数据到 excel 的功能,

        尽管如此, PostgreSQL 本身提供的 copy 命令可以实现此功能,可以将数据导成 csv
格式。但是在某些 Linux 环境下导出的 csv 文件,传输到 windows 环境下打开中文却显示
乱码, 本文介绍两种解决 csv 文件在 windows 下显示为乱码的方法。


方法一:
     一般 PostgreSQL 建库都是用的 UTF8 字符集, 在 UTF8 字符集情况下如果中文不能
正常显示,可以设置客户端字符集,修改成 " GBK " ,命令如下:

--修改客户端字符集
postgres=# show client_encoding;
client_encoding
-----------------
UTF8
(1 row)

postgres=# set client_encoding='GBK';
SET

--copy 导出数据到 GBK 编码类型的 csv 文件
skytf=# copy skytf.test_2 to '/home/postgres/script/tf/skytf.test_2.csv' with csv header;
COPY 1000000
      
   备注:此时通过 sftp 将 csv 文件传到 windows 本机,就不会出现乱码了。
   
  

方法二: 使用 iconv 工具更改文件编码
          iconv 是 linux 命令,用来转换文件的编码的 ,手册解释如下 "Convert encoding of
given files from one encoding to another",我们可以使用 iconv 命令转换文件的编码,如果 utf8
编码的文件中文显示为乱码,可以使用 iconv 命令将 UTF8 格式文件转换成 gb18030,参考步骤:

--导出数据到 utf8 编码类型文件。
skytf=# set client_encoding='UTF8';
SET

skytf=# show client_encoding;
client_encoding
-----------------
UTF8
(1 row)

skytf=# copy skytf.test_2 to '/home/postgres/script/tf/skytf.test_2.csv' with csv header;
COPY 1000000

--将文件编码由 utf8 转换成 gb18030
iconv -f utf-8 -t gb18030 skytf.test_2.csv -o skytf.test_2_gbk.csv


附: iconv 命令参考
[postgres@tf]$ iconv --help
Usage: iconv [OPTION...] [FILE...]
Convert encoding of given files from one encoding to another.

Input/Output format specification:
  -f, --from-code=NAME       encoding of original text
  -t, --to-code=NAME         encoding for output

Information:
  -l, --list                 list all known coded character sets

Output control:
  -c                         omit invalid characters from output
  -o, --output=FILE          output file
  -s, --silent               suppress warnings
      --verbose              print progress information

  -?, --help                 Give this help list
      --usage                Give a short usage message
  -V, --version              Print program version

Mandatory or optional arguments to long options are also mandatory or optional
for any corresponding short options.

For bug reporting instructions, please see:


文章原文:http://francs3.blog.163.com/blog/static/4057672720120694224195/

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-302960-1-1.html 上篇帖子: postgresql 预写式日志(Write Ahead Long) 下篇帖子: PostgreSQL修改sql表的方法汇总(转载)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表