Mut*_*ton 5 postgresql collation character-set
在 Windows 7 中,"English_United States.1252"
当我在安装程序中选择“英语,美国”区域设置时,排序规则设置为。在 Linux 中,排序规则"en_US.UTF-8"
默认设置为。
我还没有找到任何方法在 Windows 中将排序规则的代码集设置为 UTF-8,所以我只是想知道在这些示例情况下数据库的行为是否会有所不同?或者一般来说,排序规则的代码集部分的影响是什么?
我在两个数据库中都将编码设置为 UTF-8,问题是排序规则代码集的差异是否会导致行为差异。
关于数据库的编码/字符集和排序规则的 ctype/代码集之间的关系,文档不是很清楚。它提到的所有内容都是以下语句(均可在22.3. 字符集支持文档页面上找到):
每个数据库的字符集必须与数据库的 LC_CTYPE(字符分类)和 LC_COLLATE(字符串排序顺序)区域设置兼容
在 Windows 上,...,UTF-8 编码可用于任何语言环境。
重要提示:在大多数现代操作系统上,PostgreSQL 可以确定 LC_CTYPE 设置隐含的字符集,并且它将强制仅使用匹配的数据库编码。在较旧的系统上,您有责任确保使用所选区域设置所期望的编码。这方面的错误很可能会导致诸如排序之类的语言环境相关操作的奇怪行为。
此处暗示该LC_CTYPE
值仅对其字符集中的字符具有规则。值1252
表示Windows Latin1的扩展 ASCII 代码页。所有这些字符可以被编码成UTF-8(您当前的编码),但是,这并不一定意味着区域识别功能,如upper
,lower
,initcap
,等会表现上存在的代码页之外的字符操作时如预期. 这应该可以通过对不在 Windows Latin1 / Code Page 1252 字符集中的字符运行这些函数之一来测试。例如,拉丁小写字母 Nj U+01CC:
应该大写为:
所以,如果 (抱歉,我目前没有 PostgreSQL 来测试)以下内容;
SELECT upper('?'), lower('?');
Run Code Online (Sandbox Code Playgroud)
返回:
SELECT upper('?'), lower('?');
Run Code Online (Sandbox Code Playgroud)
那么“1252”LC_CTYPE
值不会对任何事情产生不利影响,这看起来非常积极。它仍然将是很好的尝试SELECT
与ORDER BY
自分选的文件,因为这将有可能,如果这些数值受灾面积中几次提到-编码和LC_CTYPE -当时发生冲突。
您无法更改LC_COLLATE
或LC_CTYPE
一旦创建了数据库,因此您可以尝试创建一个新数据库以查看是否可以获得所需的设置,而不管安装程序认为您应该拥有什么:
CREATE DATABASE my_db_name WITH
ENCODING 'UTF8'
LC_COLLATE='English_United States.UTF8'
LC_CTYPE='English_United States.UTF8'
TEMPLATE=template0;
Run Code Online (Sandbox Code Playgroud)
您可能需要查看pg_collation系统目录以查看可用的内容。
归档时间: |
|
查看次数: |
5127 次 |
最近记录: |