MySQL中TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT的最大存储大小

MySQL中TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT的最大存储大小

技术背景

在MySQL数据库中,为了满足不同长度文本数据的存储需求,提供了四种TEXT类型,分别是TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT。了解这些数据类型的最大存储大小,对于数据库表结构的设计和数据存储的规划至关重要。特别是在使用UTF - 8字符编码时,由于UTF - 8包含多字节字符,实际能存储的字符数量会受到字符编码的影响。

实现步骤

查看官方文档

根据MySQL 8的文档,各TEXT类型的最大字节长度如下:

类型最大长度
TINYTEXT255 (2^8 - 1) 字节
TEXT65,535 (2^16 - 1) 字节 = 64 KiB
MEDIUMTEXT16,777,215 (2^24 - 1) 字节 = 16 MiB
LONGTEXT4,294,967,295 (2^32 - 1) 字节 = 4 GiB

考虑字符编码影响

由于UTF - 8编码的字符可能由1 - 3字节组成(在某些情况下可能是4字节),因此实际能存储的字符数量会因字符不同而有所变化。以下是不同TEXT类型在最坏情况(每个UTF - 8字符3字节)和最好情况(每个UTF - 8字符1字节)下能存储的字符数量及大致的单词估计(假设英语平均每个单词4.5个字母):

类型最坏情况(x/3)最好情况(x)单词估计(A/4.5) - (B/4.5)
TINYTEXT8525518 - 56
TEXT21,84565,5354,854.44 - 14,563.33
MEDIUMTEXT5,592,41516,777,2151,242,758.8 - 3,728,270
LONGTEXT1,431,655,7654,294,967,295318,145,725.5 - 954,437,176.6

核心代码

以下是一个简单的SQL示例,展示如何创建包含不同TEXT类型字段的表:

1
2
3
4
5
6
7
8
9
10
11
12
-- 创建一个包含不同TEXT类型字段的表
CREATE TABLE text_types_table (
id INT AUTO_INCREMENT PRIMARY KEY,
tinytext_column TINYTEXT,
text_column TEXT,
mediumtext_column MEDIUMTEXT,
longtext_column LONGTEXT
);

-- 插入数据示例
INSERT INTO text_types_table (tinytext_column, text_column, mediumtext_column, longtext_column)
VALUES ('Tiny text example', 'This is a sample text for TEXT column.', 'A much larger text for MEDIUMTEXT column...', 'An extremely long text for LONGTEXT column...');

最佳实践

  • 合理选择数据类型:根据实际数据长度选择合适的TEXT类型,避免浪费存储空间。例如,如果数据长度通常在255字节以内,优先考虑使用VARCHAR而不是TINYTEXT。
  • 考虑字符编码:在使用UTF - 8编码时,要考虑字符的多字节特性,确保数据不会超出字段的最大存储限制。

常见问题

TINYTEXT和VARCHAR的选择

一般情况下,建议使用VARCHAR代替TINYTEXT。因为所有TEXT类型(包括TINYTEXT)的数据都存储在行外作为对象,会有额外的开销,并且这些对象通过8或16字节的地址引用。而VARCHAR没有这些额外开销。但在某些宽行的情况下,TINYTEXT仍然有用,因为其数据存储在行外,可以避免行大小超出限制。

不同语言的存储差异

不同语言的字符在UTF - 8编码下占用的字节数不同,会影响实际能存储的字符数量。例如,英语大多是单字节ASCII字符,而希腊语、阿拉伯语等语言通常需要2字节来存储一个字符,CJK(中文、日文、韩文)字符大多需要3或4字节。在设计表结构时,需要根据实际存储的语言内容来考虑字段的大小。


MySQL中TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT的最大存储大小
https://119291.xyz/posts/2025-04-23.mysql-text-types-maximum-storage-sizes/
作者
ww
发布于
2025年4月23日
许可协议