如何在不同的语言环境下使用 PostgreSQL upper() 函数?

4 postgresql locale

我在共享主机上有一个 PostgreSQL 数据库,使用的结果upper由于区域设置的原因,在本地数据库中使用该函数的结果有所不同。

\n\n

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

\n\n
SELECT version();\n-- "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"\n\nSHOW LC_COLLATE;\n-- "fr_FR.UTF-8"\n\nSELECT upper(\'\xc3\xa9tienne\');\n-- "\xc3\x89TIENNE"\n
Run Code Online (Sandbox Code Playgroud)\n\n

这是我在生产环境中的情况:

\n\n
SELECT version();\n-- "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"\n\nSHOW LC_COLLATE;\n-- "C"\n\nSELECT upper(\'\xc3\xa9tienne\');\n-- \xc3\xa9TIENNE\n
Run Code Online (Sandbox Code Playgroud)\n\n

现在,由于生产环境位于共享主机中,因此由于主机策略,我无法更改区域设置。那么,在使用upper函数时,有没有其他方法可以达到预期的结果呢?

\n

Joa*_*son 5

对于 9.1 及更高版本,您只需在本地选择排序规则即可进行查询。
\n遗憾的是,考虑到您的版本号,这需要升级,因此可能有帮助,也可能没有帮助。

\n\n
SELECT UPPER(\'\xc3\xa9tienne\' COLLATE "C")      C_Collation,\n       UPPER(\'\xc3\xa9tienne\' COLLATE "fr_FR") FR_Collation;\n\nC_Collation        FR_Collation\n--------------------------------------\n\xc3\xa9TIENNE            \xc3\x89TIENNE\n
Run Code Online (Sandbox Code Playgroud)\n\n

用于测试的 SQLfiddle

\n