根据MySQL文档,有四种文本类型:
假设字符编码为UTF-8,我可以在每种数据类型的列中存储的最大长度是多少?
发布于 2014-04-19 12:18:30
相同答案的扩展
这是一个用于快速决策的粗略估计表!
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的回答:https://stackoverflow.com/a/35785869/1881812
发布于 2016-03-04 00:33:26
面对@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,视情况而定)。
当然,这是忽略存储管理费用等。
发布于 2017-05-18 15:36:47
这很好,但没有回答这个问题:
“应该始终使用VARCHAR而不是TINYTEXT。”如果您有宽行,Tinytext是有用的-因为数据是从记录中存储的。有一个性能开销,但它确实有用处。
https://stackoverflow.com/questions/13932750
复制相似问题