postgresql 字符集server_encoding变更
2015-11-30 14:56
447 查看
--今天在使用postgres_fdw做远端数据库转储时,发现本地所使用的字符集与远端是不同的,造成插入数据错误
postgres=# insert into t select * from for_t;
ERROR: character with byte sequence 0xe7 0xa6 0xb4 in encoding "UTF8" has no equivalent in encoding "EUC_CN"
CONTEXT: Remote SQL command: SELECT pnr FROM rudy.t
--本地的编码
postgres=# select name,setting,context from pg_settings where name like '%encoding%';
name | setting | context
-----------------+---------+----------
client_encoding | UTF8 | user
server_encoding | EUC_CN | internal
--远端的数据库编码
dev=# select name,setting,context from pg_settings where name like '%encoding%';
name | setting | context
-----------------+---------+----------
client_encoding | UTF8 | user
server_encoding | UTF8 | internal
--可以选择导出数据,使用inserts方式,再执行导入
pg_dump -d dev -t rudy.t --data-only --inserts -f /tmp/t.sql
psql -l -f /tmp/t.sql
--注意使用这种方式导入时比较慢
--如果其中某一行命令出错,那么将仅有该行数据丢失,而不是整个表的数据丢失,即不能做到事务安全
--由于编码的原因会造成一部分数据不能导入成功
ERROR: character with byte sequence 0xe7 0xa6 0xb4 in encoding "UTF8" has no equivalent in encoding "EUC_CN"
--也可以重新初始化一个新的数据库集群
--备份整个数据库集群
pg_dumpall -f /tmp/pg_dump.sql
mv data/ data_bak
initdb -E UTF8 --local=C
--覆盖新生成的配置文件
cp ../data_bak/postgresql.conf .
cp ../data_bak/pg_hba.conf .
--导入之前导出的文件则可
psql -f /tmp/pg_dump.sql
postgres=# insert into t select * from for_t;
ERROR: character with byte sequence 0xe7 0xa6 0xb4 in encoding "UTF8" has no equivalent in encoding "EUC_CN"
CONTEXT: Remote SQL command: SELECT pnr FROM rudy.t
--本地的编码
postgres=# select name,setting,context from pg_settings where name like '%encoding%';
name | setting | context
-----------------+---------+----------
client_encoding | UTF8 | user
server_encoding | EUC_CN | internal
--远端的数据库编码
dev=# select name,setting,context from pg_settings where name like '%encoding%';
name | setting | context
-----------------+---------+----------
client_encoding | UTF8 | user
server_encoding | UTF8 | internal
--可以选择导出数据,使用inserts方式,再执行导入
pg_dump -d dev -t rudy.t --data-only --inserts -f /tmp/t.sql
psql -l -f /tmp/t.sql
--注意使用这种方式导入时比较慢
--如果其中某一行命令出错,那么将仅有该行数据丢失,而不是整个表的数据丢失,即不能做到事务安全
--由于编码的原因会造成一部分数据不能导入成功
ERROR: character with byte sequence 0xe7 0xa6 0xb4 in encoding "UTF8" has no equivalent in encoding "EUC_CN"
--也可以重新初始化一个新的数据库集群
--备份整个数据库集群
pg_dumpall -f /tmp/pg_dump.sql
mv data/ data_bak
initdb -E UTF8 --local=C
--覆盖新生成的配置文件
cp ../data_bak/postgresql.conf .
cp ../data_bak/pg_hba.conf .
--导入之前导出的文件则可
psql -f /tmp/pg_dump.sql
相关文章推荐
- pl SQL32位客户端无法连接64位数据库解决办法
- postgresql cluster和correlation
- Memcached的学习与使用
- 用dos命令给mysql数据库新建表
- Oracle 11g静默安装简明版
- SQL Server系列(2)--T-SQL语句
- 表连接(oralce、mysql、sql server)
- Mysql子查询的概念、分类、语法
- Oracle 10g设置IP访问限制
- 使用cygwin中的awk工具进行mysql binlog日志查看[利刃篇]
- oracle-btree和bitmap索引
- oracle 非空闲等待事件排查
- centos6上redis搭建配置
- 不停止 MySQL 服务增加从库的两种方式
- MyBatis动态SQL语句
- Usermod:user oracle is currently logged in 家目录不能改变解决方法
- MySql集群环境搭建(windows平台)
- 号码段 归属地 数据库 移动 联通 电信
- mysql 性能优化实践(转)
- Redis Mass Insertion