每the MySQL docs,有四种TEXT类型:
假设字符编码为UTF-8,我可以在每种数据类型的列中存储的最大长度是多少?
答案 0 :(得分:1396)
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
请注意,可以存储在列中的字符的数量取决于字符编码。
答案 1 :(得分:221)
扩展相同的答案
这是一个用于快速决策的粗略估计表!
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 | 21845 | 65,535 | 4854.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
答案 2 :(得分:37)
升级到@ 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剧本(汉字,汉字,平假名,片假名等)我一无所知;我认为字符大多需要UTF-8中的3个字节,并且(大量简化)它们可能被认为每个字使用大约2个字符,所以它们将介于其他两个字符之间。 (CJK脚本可能需要使用UTF-16来减少存储,具体取决于)。
这当然忽略了存储开销等。
答案 3 :(得分:6)
这很好,但没有回答这个问题:
“应始终使用VARCHAR而不是TINYTEXT。”如果你有宽行,Tinytext很有用 - 因为数据存储在记录之外。存在性能开销,但确实有用。