【问题标题】:Difference in storage space requirement for TinyText and Text - MySQLTinyText 和 Text 的存储空间需求差异 - MySQL
【发布时间】:2011-08-22 03:32:18
【问题描述】:

在 MySQL 手册 Data Type Storage Requirements 中,我发现:

Data Type   Storage Required
--------------------------------------------
TINYTEXT    L + 1 bytes, where L < 2^8  
TEXT        L + 2 bytes, where L < 2^16
  1. 如果我在 TinyText 和 Text 字段中存储 240 个字符 [utf8-general],Text 字段会比 TinyText 多吃 1 个字节吗?
  2. 如果我存储 1024 个字母 [utf8-general],Text 将占用多少空间?
    我认为是 1024+2 个字节
  3. 如果我在文本字段中保存单个字符或 2^16 个字符,它会占用相同的空间吗?

【问题讨论】:

  • 为什么你认为 UTF-8 中的 1 个字符需要 1 个字节?
  • Tinytext 吃 L+1 字节,Text 吃 L+2 字节,所以 ((L+2)-(L+1))=1 字节
  • Data Type Storage Requirements 问题中提到的文档。

标签: mysql sql types


【解决方案1】:
  1. TinyText 最多只能存储 255 个字节。如果您不幸不得不存储 63 个字符,而在 UTF-8 中全部需要 4 个字节,那可能只有 63 个字符。另一方面,如果它们实际上都在 UTF-8 的 ASCII 子集中,它可以存储 255 个字符。

  2. 如果您存储 1024 个字符,它们将占用 1024 到 4096 (+2) 个字节。使用 UTF-8 编码的 Unicode 字符将占用 1 到 4 个字节。

  3. 在文本字段中需要一个字节 (U+0000 .. U+007F) 的单个字符将需要 3 个字节(1 个字符,2 个长度)。另一方面,需要 4 个字节的单个字符(比如 U+101001 - 我不确定它作为 Unicode 字符是否有效,但它需要 4 个字节来存储它)总共需要 6 个字节来存储它。在这两种情况下,它都不接近 2^16 字节。

在处理 Unicode 时要学会区分字节和字符;这很重要。

【讨论】:

    【解决方案2】:

    Q1:是的
    Q2:无法回答。 utf-8 中的每个字符可以占用 1 到 6 个字节。所以它需要1024+2 .. 6144+2字节
    Q3:没有

    【讨论】:

    • 我不知道 utf-8 中的每个字符可以占用 1 到 6 个字节。所以它需要 1024+2 .. 6144+2 字节,你能再解释一下吗?什么时候使用 1,什么时候使用 6 个字节,至少有一个例子?
    • @Sourav: en.wikipedia.org/wiki/Utf-8 --- 每个字符都有自己的“代码”。所以“A”占用 1 个字节,“∞”(无穷大字符)占用 2 个字节,以此类推
    • @Sourav:Unicode 是一个 21 位字符集,最多只需要 4 个字节就可以在 UTF-8 中存储一个字符(代码点)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-19
    • 2013-02-21
    • 2016-04-22
    相关资源
    最近更新 更多