我在共享主机上有一个 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/