V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
wzw
V2EX  ›  PostgreSQL

PostgreSQL 数据库 正常情况下指定了 locale=C 与 encoding=UTF8 (最简单)

  •  1
     
  •   wzw · 209 天前 · 1580 次点击
    这是一个创建于 209 天前的主题,其中的信息可能已经有所发展或是发生改变。

    目前需要上新项目, 用了 PostgreSQL, 这样的设置是不是正常情况下, 最简单最合适?

    谢谢

    pg_createcluster 16 main --locale=C --encoding=UTF8 --start
    

    ===

    看到这篇文章

    PG 中的本地化排序规则 https://pigsty.io/zh/blog/admin/collate/

    里面提到:

    为什么 Pigsty 在初始化 Postgres 数据库时默认指定了 locale=C 与 encoding=UTF8

    答案其实很简单,除非真的明确知道自己会用到 LOCALE 相关功能,否则就根本不应该配置 C.UTF8 之外的任何字符编码与本地化排序规则选项

    13 条回复    2024-05-09 12:47:13 +08:00
    chuck1in
        1
    chuck1in  
       209 天前   ❤️ 1
    pg sql 我记得方便的地方就是你不需要做什么设置吧,默认就是最佳实践直接开用就行了。

    https://github.com/ccmjga/mjga-scaffold/blob/main/compose.yaml

    这个 pgsql 里面什么也没有设置,直接拿来用就是可以上生产的。
    wzw
        2
    wzw  
    OP
       209 天前
    @chuck1in 默认会按服务器的 LC 信息走,

    之前我也是开箱直接用, 但是看了这个文章, 才来问问
    Radeon
        3
    Radeon  
       209 天前   ❤️ 1
    对。但是 aA 不会排到一起,中文排序也是没有明显规则的。毕竟 locale=C 就是按照字符集里的出现顺序
    wzw
        4
    wzw  
    OP
       209 天前
    @Radeon 好的, 不会有坑就行, 排序问题, 目前还没遇到这个功能需求
    Vonng
        5
    Vonng  
       208 天前   ❤️ 1
    我是原作者。用 C locale 的好处文章里面已经说过了。
    但纯 C locale 有一个问题,pg_trgm 三字组全文模糊检索功能会收到影响。

    我推荐专门指定 lc_ctype 为 en_US ,这样可以解决这个问题。
    当然,如果你用不着这个功能,也可以直接全部使用 C.UTF8 。

    使用 C.UTF8 的另一个好处是,对不同操作系统环境的兼容性更好。
    比如,如果你使用最小安装,中文操作系统,那么可能 en_US.UTF8 这个 locale 定义都是没有的。
    但是 C.UTF8 这个 locale 总是在所有操作系统中可用的。
    wzw
        6
    wzw  
    OP
       208 天前
    @Vonng 都是 Ubuntu 20.04/22.04 英文系统跑数据库.

    所以最终建议是 --locale=C --encoding= en_US .UTF8 吗?
    wzw
        7
    wzw  
    OP
       208 天前
    @Vonng --locale=C --ctype=en_US.UTF-8 --encoding=en_US.UTF-8 是这样吗?
    wzw
        8
    wzw  
    OP
       208 天前
    @Vonng 问了 GPT-4, 最终应该是:

    --locale=en_US.UTF-8 --lc-ctype=en_US.UTF-8 --encoding=UTF8 吧?

    请你帮忙确认, 谢谢
    wzw
        9
    wzw  
    OP
       207 天前
    --locale=C --lc-ctype=en_US.UTF-8 --encoding=UTF8
    lolizeppelin
        10
    lolizeppelin  
       205 天前
    pg 最好指定 lc_message=en_US.UTF-8
    wzw
        11
    wzw  
    OP
       204 天前 via iPhone
    @lolizeppelin #10 为啥
    lolizeppelin
        12
    lolizeppelin  
       200 天前
    @wzw
    code 不能确定具体错误, 很多错误需要解析错误文本才能确定具体错误
    wzw
        13
    wzw  
    OP
       199 天前
    @lolizeppelin #12 问了 GPT-4, 谢谢你的分享, 还有什么吗?

    --locale=C --lc-ctype=en_US.UTF-8 --lc_message=en_US.UTF-8 --encoding=UTF8
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1217 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 17:43 · PVG 01:43 · LAX 09:43 · JFK 12:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.