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来试试。