首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >存储多语言字符串的最佳实践

存储多语言字符串的最佳实践
EN

Stack Overflow用户
提问于 2012-03-27 19:54:59
回答 1查看 11K关注 0票数 13

我需要在Postgres表中存储不同语言(2-4种语言)的不太长字符串的不同版本。

做到这一点的最好方法是什么?数组或JSON或类似的东西?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-03-27 21:13:47

首先,确保database locale可以处理不同的语言。使用UTF-8服务器编码。可以选择将LC_COLLATE = 'C'设置为中立,或者对您的第一种语言使用排序规则,使其具有默认排序顺序。从阅读手册中的Collation Support一章开始。

我强烈建议您使用最新版本的PostgreSQL (撰写本文时为9.1),因为它具有卓越的排序规则支持。

至于表结构,:保持简单。这听起来像是需要处理的语言数量很少,数量固定。你可以只为每种语言写一个专栏,然后:

代码语言:javascript
运行
复制
CREATE TABLE txt (
  txt_id serial PRIMARY KEY
 ,txt    text NOT NULL -- master language NOT NULL?
 ,txt_fr text -- others can be NULL?
 ,txt_es text
 ,txt_de text
);

这是非常有效的,即使有很多种语言。NULL storage is very cheap.

如果您有不同数量的语言需要处理,那么单独的表可能是更好的解决方案。此解决方案假设您有一种“主语言”,其中字符串始终存在:

代码语言:javascript
运行
复制
CREATE TABLE txt (
  txt_id serial PRIMARY KEY
 ,txt    text NOT NULL -- master language NOT NULL?
);

CREATE TABLE lang (
  lang_abbr text PRIMARY KEY -- de, es, fr, ...
 ,lang      text NOT NULL
 ,note      text
);

或者,如果(两个字母)缩写就足够了,那么只需创建一个enum type来标识该语言。

代码语言:javascript
运行
复制
CREATE TABLE txt_trans (
  txt_id    int REFERENCES txt(txt_id) ON UPDATE CASCADE ON DELETE CASCADE
 ,lang_abbr text REFERENCES lang(lang_abbr) ON UPDATE CASCADE
 ,txt       text NOT NULL -- master language NOT NULL?
 ,CONSTRAINT txt_trans_pkey PRIMARY KEY (txt_id, lang_abbr)
);

而不是,特别对待主语言,并将所有语言变体放在同一个表中,这可能会使应用程序中的处理变得更简单。但这真的取决于你的需求。

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

https://stackoverflow.com/questions/9889077

复制
相关文章

相似问题

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