优化:在 MySQL 列中存储 ISO 639-3 语言int language_id 或 varchar 语言

问题描述

我有一个需要大规模快速运行的 MysqL 数据库

选项 1 表可以将语言 ISO 639-3 代码存储为列:varchar(3) 语言

选项 2 表可以将语言的 ID 存储为一列:int(2?) language_id,并且可以有一个带有 ISO 639-3 代码的语言表。

问题 规模化速度的意义何在?选项 1 在数据库中更容易阅读。如果速度相同或即使在规模上也完全可以忽略不计,我更喜欢它。

谢谢!

解决方法

我推荐:

CREATE TABLE ...
    ISO_630_3 CHAR(3) CHARACTER SET ascii

这将是 3 个字节,小于 INT(4 个字节)and not much bigger thanSMALLINT UNSIGNED`(2 个字节)。

(我说代码总是 3 个 ascii 字母是否正确?因此不需要 VAR,它需要一两个额外的字节。)

CHAR(3) 很容易索引。即使对 smallint 进行“标准化”也没有明显的优势。即使在 10 亿行的规模下,这仍然适用。

而且,正如您所指出的,“更容易阅读”是值得的。

如果您还存储文本,我假设所有此类文本都可以映射到 UTF-8?如果是这样,请使用

     my_text TEXT CHARACTER SET utf8mb4

在 MySQL 中,使用不同的字符集(或排序规则)在单个表中具有不同的列是没有问题的。

也许值得注意...从十六进制 utf-8 编码中可以发现许多语言:

⚈  Cxyy -- More Western Europe: Latin (C3-CA),Combining Diacritical Marks (CC-CD),Greek (CE-CF)
⚈  Dxyy -- Cyrillic (D0-D4),Hebrew (D6-D7),Arabic/Persian/Farsi (D8-DB),etc
⚈  E0yyyy -- various Indian character sets,southern Asia,etc.
⚈  E1yyyy -- Cherokee,Balinese,Khmer,Mongolian,Vietnamese,etc.
(etc)

-- http://mysql.rjweb.org/doc.php/charcoll#diagnosing_charset_issues

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...