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

41 天前
 wzw

目前需要上新项目, 用了 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 之外的任何字符编码与本地化排序规则选项

928 次点击
所在节点    PostgreSQL
13 条回复
chuck1in
41 天前
pg sql 我记得方便的地方就是你不需要做什么设置吧,默认就是最佳实践直接开用就行了。

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

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

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

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

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

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

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

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

--locale=C --lc-ctype=en_US.UTF-8 --lc_message=en_US.UTF-8 --encoding=UTF8

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1036625

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX