当前位置: 首页 > 知识库问答 >
问题:

TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT最大存储大小

樊博雅
2023-03-14

根据MySQL文档,有四种文本类型:

  1. TINYTEXT

假设字符编码为UTF-8,我可以在每种数据类型的列中存储的最大长度是多少?

共有3个答案

申颖逸
2023-03-14

对于@Ankan Zerob的挑战,这是我对每种文本类型中可以存储的最大长度的估计,以文字表示:

      Type |         Bytes | English words | Multi-byte words
-----------+---------------+---------------+-----------------
  TINYTEXT |           255 |           ±44 |              ±23
      TEXT |        65,535 |       ±11,000 |           ±5,900
MEDIUMTEXT |    16,777,215 |    ±2,800,000 |       ±1,500,000
  LONGTEXT | 4,294,967,295 |  ±740,000,000 |     ±380,000,000

在英语中,每个单词4.8个字母可能是一个很好的平均值(例如norvig.com/mayzner.html),尽管单词长度会因领域而异(例如口语和学术论文),所以没有必要太精确。英语主要是单字节ASCII字符,偶尔会有多字节字符,非常接近每个字母一个字节。单词间空间必须允许额外的字符,所以我从每个单词5.8字节向下舍入。带有大量口音的语言,例如波兰语,会存储稍微少一点的单词,例如单词较长的德语。

需要多字节字符的语言,如希腊语、阿拉伯语、希伯来语、印地语、泰语等,在UTF-8中通常需要每个字符两个字节。疯狂地猜测每个单词5个字母,我已经从每个单词11个字节四舍五入。

CJK脚本(Hanzi、Kanji、Hiragana、Katakana等)我一无所知;我相信字符在UTF-8中大多需要3个字节,并且(经过大量简化)它们可能被认为每个单词使用大约2个字符,因此它们将介于其他两个之间。(CJK脚本使用UTF-16可能需要更少的存储空间,视情况而定)。

这当然是忽略了存储开销等。

狄钧
2023-03-14

相同答案的扩展

  1. 这篇文章详细介绍了管理费用和存储机制

这是一个用于快速决策的粗略估算表!

  1. 因此,从最坏情况(每个utf-8字符3个字节)到最佳情况(每个utf-8字符1个字节)

x-x

      Type | A= worst case (x/3) | B = best case (x) | words estimate (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

请参考Chris V的回答:https://stackoverflow.com/a/35785869/1881812

谭学名
2023-03-14

从留档(MySQL 8):

      Type | Maximum length
-----------+-------------------------------------
  TINYTEXT |           255 (2 8−1) bytes
      TEXT |        65,535 (216−1) bytes = 64 KiB
MEDIUMTEXT |    16,777,215 (224−1) bytes = 16 MiB
  LONGTEXT | 4,294,967,295 (232−1) bytes =  4 GiB

请注意,可以存储在列中的字符数将取决于字符编码。

 类似资料:
  • 问题内容: 根据MySQL文档,共有四种TEXT类型: 细语 文本 中文字 长文本 假设字符编码为UTF-8,我可以在每种数据类型的列中存储的最大长度是多少? 问题答案: 从文档中: 请注意,可以在您的列中存储的 字符 数取决于 字符编码 。

  • Snowflake文档指出,VARCHAR列仅限于16 MB未压缩的https://docs.Snowflake.net/manuals/sql-reference/data-types-text.html#data-types-for-text-strings Snowflake文档指出,VARCHAR数据会自动转换为JavaScript字符串数据类型。 https://docs.Snowfla

  • 我知道使用尽可能最小的数据类型的原则,但我想知道为什么这会适用于MySQL中的TEXT/MEDIUMTEXT/LONGTEXT?如果我使用LONGTEXT而不是MEDIUMTEXT,是否存在性能问题?我发现了这样一个问题:当每个条目都适合中等文本大小的字段时,使用MySQL longtext大小的字段的缺点是什么?但我认为这不是性能问题的答案? 这只是一个为LONGTEXT增加一点存储空间的问题吗

  • 问题内容: 根据定义: VARCHAR:长度范围是1到255个字符。除非指定BINARY关键字,否则以不区分大小写的方式对VARCHAR值进行排序和比较。x + 1个字节 TINYBLOB,TINYTEXT:BLOB或TEXT列,最大长度为255(2 ^ 8-1)个字符x + 1个字节 因此,基于此,我创建了下表: 还是创建varchar或tinytext更好, 为什么 ? 是否相同: VARCH

  • 我得到的问题是,我希望它能够在5个字母最多,有谁可以告诉我如何做到这一点? 谢谢

  • 问题内容: 我试图找出在以下情况下“ maxmemory”的安全设置: 大量写入的应用程序 8GB RAM 假设其他进程占用约1GB 这意味着redis进程的内存使用量不得超过7GB 每个BGSAVE事件的内存使用量都会增加一倍,原因是: 在redis 文档中,有关BGSAVE事件的内存使用量增加的说法如下: 如果要在写入量很大的应用程序中使用Redis,则在将RDB文件保存在磁盘上或重写AOF日