MySQL中TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT的最大存储大小
MySQL中TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT的最大存储大小
技术背景
在MySQL数据库中,为了满足不同长度文本数据的存储需求,提供了四种TEXT类型,分别是TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT。了解这些数据类型的最大存储大小,对于数据库表结构的设计和数据存储的规划至关重要。特别是在使用UTF - 8字符编码时,由于UTF - 8包含多字节字符,实际能存储的字符数量会受到字符编码的影响。
实现步骤
查看官方文档
根据MySQL 8的文档,各TEXT类型的最大字节长度如下:
类型 | 最大长度 |
---|---|
TINYTEXT | 255 (2^8 - 1) 字节 |
TEXT | 65,535 (2^16 - 1) 字节 = 64 KiB |
MEDIUMTEXT | 16,777,215 (2^24 - 1) 字节 = 16 MiB |
LONGTEXT | 4,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) |
---|---|---|---|
TINYTEXT | 85 | 255 | 18 - 56 |
TEXT | 21,845 | 65,535 | 4,854.44 - 14,563.33 |
MEDIUMTEXT | 5,592,415 | 16,777,215 | 1,242,758.8 - 3,728,270 |
LONGTEXT | 1,431,655,765 | 4,294,967,295 | 318,145,725.5 - 954,437,176.6 |
核心代码
以下是一个简单的SQL示例,展示如何创建包含不同TEXT类型字段的表:
1 |
|
最佳实践
- 合理选择数据类型:根据实际数据长度选择合适的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/