sql - 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。谢谢
解决方案
您的数据库中有一个奇怪的字符(Unicode 代码点 9D,一个控制字符)可能是错误地到达那里的。
您必须将客户端编码设置为您的应用程序期望的编码;即使您摆脱了错误,也没有其他值会产生正确的结果。错误是有原因的。
你有两个选择:
修复数据库中的数据。这个角色很可能不是预期的。
将应用程序更改为在内部使用 LATIN1 或(更好的)UTF-8,并适当地设置客户端编码。
在任何地方使用 UTF-8 的好处是可以避免此类问题。
推荐阅读
- c - 如何将计算存储在for循环中,因此每次计算时都会更新一个整数值并稍后打印出来,C
- python - Python 中的括号问题。在最小时间和空间内求解?
- aurelia - “aurelia-polyfills”不起作用(或者我们无法正确导入它)
- css - vs code live sass 编译器不更新文件
- javascript - 提交突变后 QueryRenderer 不更新
- qt - 如何检测 qt 标签(或任何小部件)是否具有所需的所有空间?
- xaml - Xamarin.Forms:如何自动隐藏第一个 CollectionView
- java - 如何在scala中的for循环中应用继续并产生多个值?
- c++ - 将向量移动到 unordered_set
- r - 用插值替换缺失数据