Difference between VARCHAR and TEXT in mysql
当我们在MySQL中用VARCHAR列创建一个表时,我们必须为它设置长度。但对于TEXT型,我们不需要提供长度。
VARCHAR和TEXT有什么区别?
- 如果这是"非主题",那么你在哪里可以问和讨论这个问题呢?
TL DR;
TEXT </P >
- 定点max size of 65535个字符(你不能限制最大尺寸)
- 把2 + c字节的硬盘空间,在c是长度的可存储的字符串。
- 无法将一部分的指标
VARCHAR(M) </P >
- 变量max size of M人物
- M需求是1到65535之间的关系和
- 把1 + c字节(M& Le;255)或2 + c(256 & Le;M& Le;65535字节的磁盘空间)在c是length of stored的字符串
- 可以部分的指标
更多的细节
有一个固定TEXTmax size of 21?-1 = 65535人物。 VARCHAR有一个可变的最大尺寸M到M = 21?-1。。。。。。。 你不能选择的大小对TEXT但是你不能为一个VARCHAR。。。。。。。 </P >
其他的是差分,安,你不能把指标(除A fulltext index)是一种TEXT柱。 所以如果你想有一指标之列,你要使用VARCHAR。。。。。。。但那时间的长度是一个指标也有限,所以如果你的VARCHAR柱太长的是你要使用只读第一几个人物的VARCHAR列在你的指标(见文献的方法CREATE INDEX)。 </P >
但是你也想要使用VARCHAR,如果你知道最大长度的可能的输入字符串的M是只读的,如a phone number或name或某样本。然后,你可以使用VARCHAR(30)去大学的TINYTEXT或TEXT如果有人tries保存到文本的所有"三主之环"的书籍,在你的电话号码列只读存储你的第一个人物:30) </P >
编辑:如果你想文本存储在数据库是自然大于65535个字符,你要选择MEDIUMTEXT或LONGTEXT,但要小心:MEDIUMTEXT商店串到16兆字节的LONGTEXT到4 GB。如果你使用LONGTEXT和得到的数据通过PHP(至少,如果你没有使用mysqlistore_result),你也许得到一个内存分配错误,因为PHP的tries allocate 4 GB的内存所担心的是整个字符串可以缓冲。也许这也发生在其他语言比PHP。 </P >
然而,你应该总是检查的输入(是它太长了吗?这是否很奇怪的代码包含了吗?)在储存在数据库中。 </P >
注意:两类的方法,在所需的硬盘空间depends只读的长度的字符串不可存储的最大长度。 举例来说,如果你使用latin1字符集和存储的文本的"试验"在VARCHAR(30),VARCHAR(100)和TINYTEXT,它总是requires 5个字节(1字节到商店的长度的字符串和字节1为每个字符)。如果你商店的同一文本中的一种或一种VARCHAR(2000)TEXT柱,它可能也需要同样的空间,但是,在这个案例中,它将是6字节(2字节的存储的字符串的长度和1字节的每个字符)。 </P >
为更多的信息有一个查找的文献。 </P >
finally,我想要添加的通知,这两TEXT,和VARCHAR是可变长度的数据类型,所以和他们最可能minimize空间你需要存储的数据。但这是一个与贸易通断性能的方法。如果你需要的是更好的性能,你要使用一个固定长度的型状CHAR。。。。。。。你可以在这里读更多关于这个的。 </P >
- 你能详细说明"固定最大尺寸"和"可变最大尺寸"之间有什么区别吗?
- @我不知道我能补充什么。你想知道什么?
- @我想我知道你的意思了。基本上,"固定的最大尺寸"意味着你根本无法设置尺寸——它总是65535,即使你不想支持这么大的尺寸。这意味着文本是varchar字段的缩写,最大大小为2&185;?-1.忽略索引问题。我明白吗?
- @除雾器是正确的。我以为这就是我在前两行写的。我将把你的解释作为注释加上去。
- 与VARCHAR相比,TEXT的优势是什么?
- 看看这个答案,同时注意到这些评论。
- 确切地说,您可以使用前缀文本列作为索引。dev.mysql.com/doc/refman/5.5/en/column-indexes.html
- 文本最大为64K字节,不是字符。
- 不,固定长度的CHAR没有提供任何明显的性能改进。(这是从一个老太太关于米萨姆桌子的故事中得出的;即使在那里,它的有效性也令人怀疑。)
- 另外,TEXT不能有默认值,而VARCHAR可以。为什么文本列在MySQL中不能有默认值?-堆栈溢出