【问题标题】:Need some clarification about LC_COLLATE and LC_CTYPE需要一些关于 LC_COLLATE 和 LC_CTYPE 的说明
【发布时间】:2021-09-28 20:35:36
【问题描述】:

我已经阅读了官方的 postgres 文档来了解 LC_COLLATE 和 LC_TYPE。但是,我仍然没有正确理解它。

谁能帮助我理解这些概念和它们的影响,特别是当我们尝试加载在 oracle 编码 WE8ISO8859P15 和 postgres 编码为 utf-8 且 collat​​ion/ctype 为 en_US.UTF-8 的数据时.

提前致谢

【问题讨论】:

    标签: postgresql oracle character-encoding character-set


    【解决方案1】:

    这是“语言环境”的一部分,即国家语言支持,它不同于编码(但语言环境必须属于编码)。

    LC_CTYPE 确定哪些字符是字母、数字、空格字符、标点符号等。不同的语言对此有不同的想法。

    LC_COLLATE 确定字符串的比较和排序方式。

    第一个对 PostgreSQL 的行为影响不大,但第二个非常相关:它决定了字符串列上的 b-tree 索引如何排序(这就是为什么在创建数据库后不能更改它的原因)以及如何ORDER BY 默认对字符串进行排序(用户直接可见)。

    【讨论】:

    • 这是否意味着,因为我在 oracle 和 postgres 使用 latin1 编码,即使我使用编码为 utf-8,但 lc_ctype 设置为 en_US.UTF8 ,因此我是最终在 postgres 上出现一些数据变化??? @Laurenz Albe
    • Unicode 将 Latin1 作为前 256 个字符的基础,因此您应该没有问题(OTOH 某些程序可能会出于不同目的使用 latin1 的保留字符和控制字符)。注意:我假设您正在对事物进行转码。 Latin1 与 UTF-8 二进制不兼容。但作为答案:ORDER 通常很重要,因此请注意这是否会对您的程序产生严重影响。
    • @vigneshwarreddy 不,这与字符的编码方式无关。这是完全无关的。
    猜你喜欢
    • 1970-01-01
    • 2019-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-14
    • 1970-01-01
    相关资源
    最近更新 更多