4 回答

TA贡献1829条经验 获得超13个赞
如果需要在数据库中存储UTF8数据,则需要一个接受UTF8的数据库。您可以在pgAdmin中检查数据库的编码。只需右键单击数据库,然后选择“属性”。
但是该错误似乎告诉您源文件中存在一些无效的UTF8数据。这意味着该copy实用程序已检测到或猜测您正在向其提供UTF8文件。
如果您在Unix的某种变体下运行,则可以使用该file实用程序检查编码(或多或少)。
$ file yourfilename
yourfilename: UTF-8 Unicode English text
(我认为这也可以在终端机的Mac上使用。)不确定如何在Windows下执行此操作。
如果您在Windows系统上的文件(即未使用UTF8编码的文件)上使用相同的实用程序,则可能会显示以下内容:
$ file yourfilename
yourfilename: ASCII text, with CRLF line terminators
如果情况仍然很怪异,则可以尝试将输入数据转换为已知的编码,更改客户端的编码或同时更改两者。(我们真的在扩展我对编码知识的了解。)
您可以使用该iconv实用程序来更改输入数据的编码。
iconv -f original_charset -t utf-8 originalfile > newfile
您可以按照“ 字符集支持”中的说明更改psql(客户端)编码。在该页面上,搜索短语“启用自动字符集转换”。

TA贡献1827条经验 获得超8个赞
显然,我可以随时设置编码,
set client_encoding to 'latin1'
然后重新运行查询。不知道我应该使用哪种编码。
latin1使字符清晰易读,但是大多数带重音符号的字符都是大写的,不应该使用大写的。我以为这是由于编码错误所致,但是我认为它实际上是错误的数据。我最终保留了latin1编码,但是对数据进行了预处理并解决了大小写问题。

TA贡献1811条经验 获得超4个赞
如果可以丢弃不可转换的字符,可以使用-cflag
iconv -c -t utf8 filename.csv > filename.utf8.csv
然后将它们复制到您的表中
添加回答
举报