TinyText和Text在存储空间需求方面的区别 - MySQL

3
在MySQL手册的数据类型存储要求中,我发现:
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. 如果我在Text字段中保存一个字符或2 ^ 16个字符,它会占用相同的空间吗?

1
你认为为什么UTF-8中的1个字符占用1个字节? - zerkms
Tinytext 占用 L+1 个字节,而 Text 占用 L+2 个字节,因此 ((L+2)-(L+1))=1 字节。 - Sourav
数据类型存储要求 在问题中提到的文档。 - Jo.
2个回答

6
  1. TinyText只能存储最多255个字节。如果你不幸需要存储63个字符,而这些字符都需要4个字节的UTF-8编码,那么只能存储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时,请学会区分字节和字符,这非常重要。


3

问题1:是的
问题2:无法回答。UTF-8中每个字符可以占用1到6个字节,因此需要 1024+2 .. 6144+2 字节
问题3:不是


我之前不知道UTF-8中每个字符可以占用1到6个字节。因此,它将占用1024+2...6144+2个字节,你能再解释一下吗?可以给出至少一个例子说明何时使用1个字节和何时使用6个字节吗? - Sourav
@Sourav:http://en.wikipedia.org/wiki/Utf-8 --- 每个字符都有自己的“代码”。所以“A”占用1个字节,“∞”(无限符号)占用2个字节,等等。 - zerkms
1
@Sourav:Unicode 是一个 21 位字符集,只需要最多 4 个字节来存储 UTF-8 中的一个字符(代码点)。 - Jonathan Leffler

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接