pg表中文字符变成乱码的问题解决

近期有个需求要把postgressql数据库里面的表,倒到另一个pg数据库。

1使用 pg自带的插件,从pg1export出来,然后到pg2 import进去。发现倒不进去。报错说:要不试试latin编码。

这个时候要修改一下两个数据库的客户端编码。使用show clinet_encoding;查看客户端编码

set client_encoding='utf8';把客户端编码都统一成为utf8格式的编码。

再试一次可以导入数据了。

查看数据是乱码。

2修改数据库建库的编码。数据库初始建库的编码决定数据库文件的展示效果。

使用 select *  from pg_database;查看pg数据库的编码,发现原来我的编码是0和postgres编码是6

用代码   update pg_database set encoding=pg_char_to_encoding('UTF8') where datname='yourdatabasename';

把数据库建库编码改成utf8,再查询发现encoding=6了,说明直接用上面代码把数据库初始化编码改为utf8也可以,直接修改pg_database的encoding=6应该也可以的。

3总结一下。

1)pg插件倒数据的过程中,数据无法倒入的时候要修改client_encoding使得数据倒出以后编码和倒入以后的客户端的编码一致。才能倒入。

2)pg数据表出现中文变成乱码是数据库建库的初始编码的问题。用encoding=6可以设置成为utf8来试试。