我的数据库里有trying to import some data个.所以我创建了一个临时表,

create temporary table tmp(pc varchar(10), lat decimal(18,12), lon decimal(18,12), city varchar(100), prov varchar(2));

现在我想进口the data个,

 copy tmp from '/home/mark/Desktop/Canada.csv' delimiter ',' csv

但后来我发现了错误,

ERROR:  invalid byte sequence for encoding "UTF8": 0xc92c

我该怎么解决?我是否需要更改整个数据库的编码(如果需要,如何更改?)或者我可以只更改tmp表的编码吗?还是应该try 更改文件的编码?

推荐答案

如果需要在数据库中存储UTF8数据,则需要一个接受UTF8的数据库.您可以在pgAdmin中判断数据库的编码.只需右键单击数据库,然后 Select "属性".

但这个错误似乎告诉你源文件中有一些无效的UTF8数据.这意味着copy实用程序检测到或猜测您正在向其提供UTF8文件.

如果在Unix的某些变体下运行,可以使用file实用程序判断编码(或多或少).

$ file yourfilename
yourfilename: UTF-8 Unicode English text

(我认为这也适用于航站楼的Mac电脑.)我不知道在Windows下该怎么做.

如果对来自Windows系统的文件(即UTF8编码为not的文件)使用相同的实用程序,它可能会显示如下内容:

$ file yourfilename
yourfilename: ASCII text, with CRLF line terminators

如果情况仍然很奇怪,您可能会try 将输入数据转换为已知的编码,或者更改客户机的编码,或者两者兼而有之.(我们真的扩展了我对编码的知识范围.)

可以使用iconv实用程序更改输入数据的编码.

iconv -f original_charset -t utf-8 originalfile > newfile

您可以按照Character Set Support上的说明更改psql(客户端)编码.在该页面上,搜索短语"以启用自动字符集转换".

Postgresql相关问答推荐

PostgreSQL:如何 for each 唯一的客户输入/更新列中的数据,并将其递增1直到表的末尾

Postgis超过2个表的查询在运行时爆炸

Postgres-pgloader-默认情况下,在PostgreSQL中将列名转换为小写

Postgres查询按月和年分组的总计数

Prisma:获取连接的活动 Postgresql 模式的名称

如何将特定值排序为最后,其余记录按 id DESC 排序?

PostgreSQL:如何从另一列的 json 值替换为一列?

@符号在yacc中的函数中是什么意思

将一列与另一列的每个元素进行比较,该列是一个数组

在 PostgreSQL 中 Select 数字命名列会返回 ?column?

计算 PostgreSQL 中给定 GPS 坐标的日出和日落时间

postgresql中的外键可以被触发器违反

PostgreSQL INSERT 插入一个枚举数组

从 PostgreSQL 中的字段中提取数字

Postgres 中的相似函数与 pg_trgm

Rails ActiveRecord - 如何获取两个日期之间的记录

如何语法判断 PostgreSQL 配置文件?

PostgreSQL 嵌套 CTE 和 UNION

Ecto Postgres 安装错误密码验证失败

在 PostgreSQL 中使用 CASE 一次影响多个列