我正在尝试将一些数据导入我的数据库。所以我创建了一个临时表
创建临时表tmp(pc varchar(10)、lat decimal(18,12)、lon decimal(18,12)、city varchar(100)、prov varchar(2));
现在我正试图导入数据
从'/home/mark/Desktop/Canada.csv'分隔符''csv'复制tmp
但我得到了错误
错误:编码“UTF8”的字节序列无效:0xc92c
我该如何解决这个问题?我是否需要更改整个数据库的编码(如果需要,如何更改?),还是只更改tmp表的编码?或者我应该尝试更改文件的编码吗
如果需要在数据库中存储UTF8数据,则需要一个接受UTF8的数据库。您可以在pgAdmin中检查数据库的编码。只需右键单击数据库,然后选择“属性”
但这个错误似乎告诉您源文件中有一些无效的UTF8数据。这意味着copy实用程序检测到或猜测您正在向其提供UTF8文件
如果在Unix的某些变体下运行,可以使用文件实用程序检查编码(或多或少)
$文件名
yourfilename:UTF-8 Unicode英文文本
(我想这在终端的Mac电脑上也能用。)不知道在Windows下怎么做
如果您对来自Windows系统的文件(即未用UTF8编码的文件)使用相同的实用程序,它可能会显示如下内容:
$文件名
yourfilename:ASCII文本,带CRLF行终止符
如果情况仍然很奇怪,您可能会尝试将输入数据转换为已知的编码,或者更改客户机的编码,或者两者兼而有之。(我们真的扩展了我对编码的知识范围。)
您可以使用iconv实用程序更改输入数据的编码
iconv-f原始字符集-t utf-8原始文件>;新文件
您可以按照有关字符集支持的说明更改psql(客户端)编码。在该页面上,搜索短语“以启用自动字符集转换”