我在共享主机上有一个 PostgreSQL 数据库,由于语言环境设置,在我的本地数据库中使用 upper 函数的结果不同。

这是我想要的,并且在我的本地环境中有:

SELECT version();
-- "PostgreSQL 8.4.16 on i386-apple-darwin10.8.0, compiled by GCC i686-apple-darwin10-gcc-4.2.1 (GCC) 4.2.1 (Apple Inc. build 5666) (dot 3), 64-bit"

SHOW LC_COLLATE;
-- "fr_FR.UTF-8"

SELECT upper('étienne');
-- "ÉTIENNE"

这是我在生产环境中的内容:
SELECT version();
-- "PostgreSQL 9.0.13 on x86_64-pc-linux-gnu, compiled by GCC gcc-4.3.real (Debian 4.3.2-1.1) 4.3.2, 64-bit"

SHOW LC_COLLATE;
-- "C"

SELECT upper('étienne');
-- éTIENNE

现在,由于生产环境在共享主机中,由于主机策略,我无法更改区域设置。那么,在使用 upper 函数时是否有另一种方法可以获得预期的结果?

最佳答案

请注意,您 不能 覆盖版本 8.4 或 9.0 中的排序规则(如其他答案所示)。这个 feature was introduced with Postgres 9.1

在早期版本中,您无法更改创建数据库时选择的排序规则。 COLLATE 关键字不存在,如果您尝试 SET LC_COLLATE = ... ,则会出现错误:

ERROR: parameter "lc_collate" cannot be changed

你需要一个更新的版本来做到这一点。

-> SQLfiddle

对不起,但你运气不好。

关于postgresql - 如何使用具有不同语言环境的 PostgreSQL upper() 函数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17729640/

10-11 03:09
查看更多