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

标签 mysql

我仍在学习 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 表来存储所有语言环境并将当前 locale 字段更改为带有外键的 tinyint 2转到存储所有语言环境的新表。

例子:

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

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

最佳答案

新的 locales 表的优点和缺点(当不使用 locales 表时它们会被交换):

优势

  • 添加可用语言环境列表(当某些语言环境可能尚未使用时)。它允许您以某种形式创建可用语言环境的下拉列表。
  • 防止输入错误,因为只有一个 en_US 值可用。

缺点

  • JOIN 始终在新表上获取类似 en_US 的字符串。

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

关于mysql - 为多语言内容设置数据库的最实用方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51348508/

相关文章:

mysql - 我有一个带有 uuid 和系统列的表。我需要一个查询来仅返回具有 system=1 的 uuid,而不返回具有 system= 1 nad 2 的 uuid

php - 接收串口数据 : real-time web display + logging (with downsampling)

mysql - 如何获取最近创建的行,其中几列之一具有特定值?

mysql - 更新失败时运行 MySQL Insert

mysql - PostgreSQL - 列不存在(WHERE with AS)

php - 无法通过 php 表单注册新用户

php - 没有以所需格式进入 PHP 数组

java - 我有一个使用 Netbeans 的 swing 应用程序。我正在尝试将用户对象插入到数据库表中。但我收到以下错误

mysql - 如果连接到 Azure 的 Excel 工具保存在 OneDrive 上,我的团队是否必须连接到 ODBC?

php - MySQL - 多级类别结构