代码之家  ›  专栏  ›  技术社区  ›  Ricardo

为多语言内容设置数据库最实用的方法是什么?

  •  3
  • Ricardo  · 技术社区  · 6 年前

    我仍在学习MySQL,在研究一个需要多语言内容的新项目时,我偶然发现了一个问题,那就是设计一个支持此功能的数据库的最实用方法,同时也是最有效的数据库设置。

    content_quote :

    +--------------+-----------------------+------+-----+---------------------+-----------------------------+
    | Field        | Type                  | Null | Key | Default             | Extra                       |
    +--------------+-----------------------+------+-----+---------------------+-----------------------------+
    | quote_id     | int(11) unsigned      | NO   | PRI | NULL                | auto_increment              |
    | url_slug     | varchar(255)          | NO   |     | NULL                |                             |
    | author_id    | mediumint(8) unsigned | NO   |     | NULL                |                             |
    | quote        | mediumtext            | NO   |     | NULL                |                             |
    | category     | varchar(15)           | NO   |     | NULL                |                             |
    | likes        | int(11) unsigned      | NO   |     | 0                   |                             |
    | publish_time | datetime              | NO   |     | 0000-00-00 00:00:00 | on update CURRENT_TIMESTAMP |
    | locale       | char(5)               | NO   |     | NULL                |                             |
    +--------------+-----------------------+------+-----+---------------------+-----------------------------+
    

    现在我只需要一个标准的区域设置值,比如 en-US 在区域设置字段中,但是我有很多这样的表,我不确定正确的路径是什么,或者像那样保留它,或者创建一个 locale 存储所有区域设置并更改当前区域设置的表 现场 待处理字段 tinyint 2 使用外键进入存储所有区域设置的新表。

    例子:

    +-----------+------------------+------+-----+---------+-------------------+
    | Field     | Type                | Null | Key | Default | Extra          |
    +-----------+------------------+------+-----+---------+-------------------+
    | locale_id | tinyint(2) unsigned | NO   | PRI | NULL    | auto_increment |
    | locale    | char(50)            | NO   |     | NULL    |                |
    +-----------+------------------+------+-----+---------+-------------------+
    

    除了答案本身,我还想知道这两种方法的优缺点。

    1 回复  |  直到 6 年前
        1
  •  0
  •   Progman    6 年前

    新技术的优缺点 locales 表(当不是 地区 使用表格):

    优势

    • 添加一个可用区域设置列表,其中一些可能尚未使用。它允许您以某种形式创建可用区域设置的下拉列表。
    • 防止错别字,因为只有一个 en_US 可用值。

    缺点

    • JOIN 一直在新表上,只是为了得到一个字符串 恩努斯 .

    请记住,空间不是问题。不要试图根据5个字符和极小的int大小做出决定。