SQL:解决PostgreSQL数据库传输出现ERROR: invalid byte sequence for encoding “UTF8“: 0xe5 0x9b 0x20

在项目中,使用PostgreSQL数据库存储数据,由于客户需求,需要新建一个几乎相同项目,需要新建项目、数据库后更改少量功能。而使用导出数据库/导入数据库功能拷贝数据表到新数据库时出现了以下错误:
ERROR: invalid byte sequence for encoding “UTF8”: 0xe5 0x9b 0x20
在这里插入图片描述
百度后,得出的结论是:
invalid byte sequence for encoding “UTF8”: 0x00(注意:若不是0x00则很可能是字符集设置有误),是PostgreSQL独有的错误信息,直接原因是varchar型的字段或变量不接受含有’\0’(也即数值0x00、UTF编码’\u0000’)的字符串 。官方给出的解决方法:事先去掉字符串中的’\0’。
这是PostgreSQL特有的错误,官方也给出了解决方案,如果数据不多,显然是可行的。可是项目牵扯到的数据太多,这并不是一个好的方法。
找了很多方案,最后解决了问题,流程是先在新数据库中用语句构造表结构、字段相同的数据表,然后使用Navicat数据同步功能将两个数据表内容进行同步

1.打开pgAdmin,找到原数据库的构造语句。
在这里插入图片描述
2.到新的数据库中,新建查询语句粘贴后并运行。
我是使用的Navicat进行的操作,因为pgAdmin实在太慢了= =
在这里插入图片描述
运行后,可能会出现relation “a_trend_id_seq” does not exist错误。这是因为图中绿色部分语句造成的。这句话是pgsql中序列函数,构造自增id。
解决方法是把这一句更换为serial,如图
在这里插入图片描述
即可创建成功。
3.点击Navicat菜单栏中的工具,使用数据同步功能。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
部署完成后即把源数据库中数据表拷贝到的新的数据库。

我用这个方法解决了我的问题,但是不确定适用于所有项目。因为我用一些其他的方法尝试过并没有解决我的问题,如果各位有更加便捷或能解决问题的方法,欢迎分享一下,万分感谢!

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 书香水墨 设计师:CSDN官方博客 返回首页