我使用“encoding ='UTF8'”在PostgreSQL中创建了一个数据库,并在其中加载了一些UTF8数据。选择工作正常,但当我尝试在查询中执行“WHERE UPPER(name)='FOO'”时,我收到错误
ERROR: invalid multibyte character for locale
我的研究似乎表明这是因为PostgreSQL的安装是“initdb” - 与LANG=en_US
而不是LANG=en_US.UTF8
。执行“SHOW LC_COLLATE
”会显示“en_US
”。我不想转储和重新创建我的所有数据库,因为其中有几个是PostGIS,重新创建它们是一种巨大的痛苦。是否有一种解决方法,就像对待UTF8的“UPPER”一样?
更新我最终做了转储,reinitdb和数据库的恢复,它比我想象的要痛苦少,除了有点问题找出数据的位置应该去,因为postgres用户没有设置PGDATA环境变量,也没有我能找到的任何配置文件或shell脚本。
答案 0 :(得分:1)
我认为您想要的解决方法不可行,但启用PostGIS的数据库的转储和恢复应该可以正常工作。我定期使用PostGIS函数转储和恢复数据库,并使用geom对象恢复数据。
你有什么问题?
答案 1 :(得分:1)
您的诊断是正确的,这是PostgreSQL中Unicode的常见问题。安装过程试图是智能的,并使用运行它的shell的语言环境进行初始化: - (
我建议,如果您无法转储和恢复数据库,则会出现更严重且更紧急的问题,从而使数据更高。恕我直言,你应该首先解决这个问题,然后才能在发布新版本的PostgreSQL之后(或者在硬盘故障之后)实际恢复你的数据。