mysql 会为 varchar utf8 列占用多大空间?

lea*_*ord 2 mysql varchar character-set utf-8

提示:要使用 UTF-8 节省空间,请使用 VARCHAR 而不是 CHAR。否则,MySQL 必须为 CHAR CHARACTER SET utf8 列中的每个字符保留三个字节,因为这是可能的最大长度。例如,MySQL 必须为 CHAR(10) CHARACTER SET utf8 列保留 30 个字节。

来自:http : //dev.mysql.com/doc/refman/5.7/en/charset-unicode-utf8.html

这是否意味着如果我在 mysql 中使用除char utf8列之外的varchar utf8列,mysql 将使用 1 个字节的拉丁语和 3 个字节的 CJK(Chinese?japanese?Korean) 物理存储字符?

Ric*_*mes 6

CHAR(...) CHARACTER SET utf8每个字符总是占用 3 个字节——CHAR(100)占用 300 个字节(不需要长度)。

VARCHAR一个长度占用 1-2 个字节,再加上需要的字节数。因此VARCHAR(100)withhello将在任何字符集中占用 7 (2+5) 个字节。

Señor, in CHARACTER SET latin1, 取 5 个字节(加上长度)。在 utf8 中,它需要 6 个字节(加上长度)。这是因为ñF1latin1 中的 1 字节十六进制或C3B1utf8 中的 2 字节。

一些汉字和一些表情符号,需要4个字节,utf8mb4对他们来说是更好的选择。

使用CHAR代替VARCHAR. 它们通常用于长度一致的字段,例如邮政编码、国家/地区代码、md5、uuid 等。所有这些也可能是CHARACTER SET ascii或可能是latin1,但不是utf8

回到你的问题......使用CHARACTER SET utf8(或utf8mb4):

  • 英文字母占 1 个字节。
  • 西欧重音字母占用 2 个字节。
  • 希腊语、希伯来语和该一般区域中的其他语言占用 2 个字节。
  • 日语和韩语占用 3 个字节。
  • 大多数汉字是3个字节;有些是 4 并且需要 utf8mb4。
  • 更长的清单

“mysql 将使用 1 个字节的拉丁语和 3 个字节的 CJK 物理存储字符”措辞正确。将“拉丁语”更改为“英语”以使其正确。(“拉丁语”往往包括各种带重音的字符。)