我已经阅读了 postgres 官方文档来了解 LC_COLLATE 和 LC_TYPE。但是,我还是没有正确理解。
任何人都可以帮助我理解这些概念及其影响,特别是当我们尝试加载 oracle 编码为 WE8ISO8859P15 且 postgres 编码为 utf-8 且排序规则/ctype 为 en_US.UTF-8 的数据时。
提前致谢
这是“区域设置”的一部分,即国家语言支持,它与编码不同(但区域设置必须属于编码)。
LC_CTYPE
确定哪些字符是字母、数字、空格字符、标点符号等。不同的语言对此有不同的想法。
LC_COLLATE
确定字符串的比较和排序方式。
第一个对 PostgreSQL 的行为影响不大,但第二个非常相关:它决定字符串列上的 B 树索引如何排序(这就是为什么它在创建数据库后无法更改)以及如何排序
ORDER BY
默认对字符串进行排序(用户直接可见)。
LC_CTYPE
影响 lower()
和 upper()
SQL 函数的输出。 C 字符类型不会更改非 ASCII 字符的大小写,例如重音字母。 en_US.utf8 可以。