如何解决优化:在 MySQL 列中存储 ISO 639-3 语言int language_id 或 varchar 语言
选项 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 than
SMALLINT 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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。