2

我在 PostgreSQL 中使用“encoding = 'UTF8'”创建了一个数据库,并在其中加载了一些 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 用户不知道数据应该去哪里有点问题t 设置 PGDATA 环境变量,我找不到任何配置文件或 shell 脚本。

4

2 回答 2

1

我认为您想要的解决方法不可行,但是转储和恢复启用 PostGIS 的数据库应该可以正常工作。我定期使用 PostGIS 函数转储和恢复数据库以及使用 geom 对象的数据。

你有什么样的问题?

于 2009-01-18T08:50:03.877 回答
1

您的诊断是对的,这是 PostgreSQL 中 Unicode 的常见问题。安装过程尝试变得智能并使用运行它的 shell 的语言环境进行 initdbed :-(

我建议,如果你不能转储和恢复你的数据库,你有一个比大写数据更严重和更紧迫的问题。恕我直言,您应该先解决这个问题,然后才能在发布新版本的 PostgreSQL 之后(或在硬盘故障之后)实际恢复数据。

于 2009-01-18T13:23:30.643 回答