首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在postgresql中使用utf8的多种语言

在postgresql中使用utf8的多种语言
EN

Stack Overflow用户
提问于 2016-09-13 03:38:11
回答 1查看 3.5K关注 0票数 4

如何才能无缝地支持存储在postgres的utf8字符集中的所有语言?我们似乎需要与字符集一起指定一个特定于语言的排序规则,例如en_US.utf8。如果我没有弄错的话,我们就无法将英文(en_US)和中文(zh_CN)存储在同一个utf8列中,同时保持任何有意义的排序行为。如果我将列定义为en_US.utf8,它应该如何处理包含中文(zh_CN)字符/字节序列的值?实际情况是,单个列值可以包含多种语言(例如:“Helloand晚安”),而且不能根据一种语言进行排序。

是的,我可以物理地存储任何字符序列;但是在包含英语、德语、汉语、日语和韩国字符串的en_US.utf8列上排序的定义行为是什么?

我知道mysql的utf8mb4_unicode_ci排序规则并不完美,而且它没有遵循任何关于如何整理整个unicode集的设置标准。我已经可以听到反mysql的人群抱怨mysql语言无关的排序规则是如何任意的、语义上没有意义的,甚至是完全无效的。但事实是,它工作得足够好,并且满足了utf8 =多语言unicode支持的期望。

postgres只是非常固执,因为跨unicode光谱进行排序在语义上是不正确的吗?我知道开发人员在“按照规范办事”方面非常严格,但这种不能兼顾多种语言的能力至少令人沮丧。我是否遗漏了解决多语言问题的东西,还是一个utf8列可以处理任何语言,但一次只能处理一种语言的官方立场?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-13 07:00:47

你是对的,永远不会有一种完美的方法来整理跨语言的字符串。

PostgreSQL决定不创建自己的排序规则,而是使用操作系统提供的排序规则。这背后的想法是避免重新发明车轮和减少维修工作量。

因此,对于您的问题,传统的PostgreSQL回答是:如果您希望字符串排序规则在不同语言中工作得相当好,请向操作系统供应商投诉,或者选择一个提供这种排序规则的操作系统。

但是,这种方法存在PostgreSQL社区意识到的缺陷:

  • 很少人--如果有的话--根据操作系统提供的校对支持来决定操作系统。
  • PostgreSQL的排序行为取决于底层操作系统,这导致邮件列表中的用户经常出现困惑的问题。
  • 对于某些操作系统,排序规则行为可能在操作系统升级期间发生更改,从而导致数据库索引损坏(例如,请参阅这条线)。

很可能是PostgreSQL改变了它的方法;人们反复努力使用ICU库而不是操作系统排序规则(参见最近的线索),这将缓解其中的一些问题。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39461851

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档