首页 > 解决方案 > Postgres ERROR "UTF8" 中的编码问题是最好将编码设置为 UTF8 还是使数据与 WIN1252 兼容?

问题描述

我创建了一个从 Excel 电子表格导入 CSV 文件的表格。当我尝试运行下面的 select 语句时,我得到了错误。

test=# SELECT * FROM dt_master;
ERROR:  character with byte sequence 0xc2 0x9d in encoding "UTF8" has no equivalent in encoding "WIN1252"

我已经阅读了这个堆栈溢出帖子中发布的解决方案,并且能够通过将编码设置为 UTF8 来克服这个问题,所以到那时我仍然能够继续处理数据。然而,我的问题是,将编码设置为 UTF8 是否真的可以解决问题,或者它只是一种解决方法,并且会在未来产生其他问题,我最好删除冲突字符并使数据符合 WIN1252。谢谢

标签: sqlpostgresqlencodingutf-8psql

解决方案


您的数据库中有一个奇怪的字符(Unicode 代码点 9D,一个控制字符)可能是错误地到达那里的。

您必须将客户端编码设置为您的应用程序期望的编码;即使您摆脱了错误,也没有其他值会产生正确的结果。错误是有原因的。

你有两个选择:

  • 修复数据库中的数据。这个角色很可能不是预期的。

  • 将应用程序更改为在内部使用 LATIN1 或(更好的)UTF-8,并适当地设置客户端编码。

在任何地方使用 UTF-8 的好处是可以避免此类问题。


推荐阅读