即使对于不完整的单元格,MySQL 中的 varchar/text/longtext 列是否占用文件系统中的全长大小?
例如,参考这篇博客文章,我有以下列,并在其中放入了一个给定的字符串。
CHAR (72) - can store upto 72 characters - i put in a string "abcd"
VARCHAR (72) - can store upto 72 characters - i put in a string "abcd"
TINYTEXT - can store upto 255 characters - i put in a string "abcd"
TEXT - can store upto 65,535 characters - i put in a string "abcd"
LONGTEXT - can store upto 4,294,967,295 characters - i put in a string "abcd"
Run Code Online (Sandbox Code Playgroud)
这些列中的每一列将占用多少实际物理空间?每列能够存储的完整大小?还是仅存储“abcd”所需的量?
Ric*_*mes 10
'abcd' inCHAR(72) CHARACTER SET ascii在磁盘上占用 72 个字节。
'abcd' inCHAR(72) CHARACTER SET utf8在磁盘上占用 3*72 字节。
'abcd' inCHAR(72) CHARACTER SET utf8mb4在磁盘上占用 4*72 字节。
'abcd' inVARCHAR(72)在磁盘上占用 1+4 个字节。
'abcd' inTINYTEXT在磁盘上占用 1+4 个字节。
'abcd' inTEXT在磁盘上占用 2+4 个字节。
'abcd' inLONGTEXT在磁盘上占用 4+4 个字节。
更新:在某些版本中,InnoDB 将仅存储 4 个字节的CHAR案例。
注:
1、2、4为长度;VARCHAR可能2在某些情况下。
该CHARACTER SET是在所有情况下很重要,但不影响占用的空间由“ABCD”除了CHAR。
@akuzminsky - 你对 *3 的看法是错误的。 CHAR(N)并且VARCHAR(N)最多可以容纳N个字的声明CHARACTER SET。这将变为 3*N 字节 forCHAR或 1+3*N for VARCHAR。
TEXT限制为 65535个字节(加上 2 个字节的长度)。
在上述长度之上还有开销。在 InnoDB 中,有记录标志、事务 id、阻塞因子、指向溢出区域的指针等等。所以,如果你使用这种算法,它会低估使用的磁盘空间。
MyISAM 更节俭;每条记录至少有 1 个字节的开销;在某些情况下,只有 1。
| 归档时间: |
|
| 查看次数: |
6176 次 |
| 最近记录: |