【问题标题】:MySQL String Encoding Storage SpaceMySQL字符串编码存储空间
【发布时间】:2014-12-24 09:45:57
【问题描述】:

我知道 MySQL 中的 utf8 存储为固定长度的 3 个字节(24 位),utf4mb4 是固定的 4 个字节。我假设拉丁语 1 是一个固定长度的 1 字节 - 我的问题是 mysql ascii 类型为 7 位,是否比拉丁语 1 节省了一点存储空间?

【问题讨论】:

  • “我知道 MySQL 中的 utf8 存储为固定长度的 3 个字节(24 位)”,可能会重复答案,但请确保您理解: no,utf8 not 存储为固定长度的 3 个字节。而且我不是在这里谈论 char 与 varchar,例如在文本字段中存储字符的方式将根据特定字符的需要使用一个、两个或三个字节。
  • @FélixGagnon-Grenier 我已经意识到了。
  • 是的,我不记得我为什么这么评论了。答案中解释得很清楚......

标签: mysql encoding utf-8 ascii latin1


【解决方案1】:

你最初的前提是不正确的。在 VARCHAR*TEXT 列中,utf8 和 utf8mb4 字符仅消耗每个字符的 utf8 表示所需的字节数。唯一固定的多字节分配用于CHAR 列,因为它们是固定宽度的。

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

http://dev.mysql.com/doc/refman/5.6/en/charset-unicode-utf8.html

否则,当存储utf8和utf8mb字符时,每个字符的最大字节数用于每个字符:

在使用 utf8(或 utf8mb4)Unicode 字符集时,您必须记住,并非所有字符都使用相同的字节数,每个字符最多需要三(四)个字节。 [强调]

http://dev.mysql.com/doc/refman/5.6/en/storage-requirements.html

没有 7 位跨字节存储字符集。

但是,压缩整个表可以在较新的版本中完成,如果您有足够的 CPU,如果您的磁盘相对较慢或您的服务器花费大量时间,启用表压缩后服务器实际上可以执行得更好。 /O 绑定。

http://dev.mysql.com/doc/refman/5.6/en/innodb-compression.html

【讨论】:

  • 我添加了来自文档的附加引用——MySQL 中的 utf8 字符 maximum 为 3 个字节,但 minimum 为1 个字节。您似乎在说 MySQL 中的 utf8 字符始终占用 3 个字节的“固定长度”,就好像为了速度而故意降低存储效率一样,但事实并非如此。 MySQL 中的 utf8 字符仅在行数据中占用以 utf8 编码存储该字符所需的字节数(CHAR 列除外,如果所有字符都为 max,则必须分配最大可消耗空间宽度)。
猜你喜欢
  • 2011-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-26
  • 2011-09-10
  • 2021-03-13
  • 1970-01-01
相关资源
最近更新 更多