mysql中VARCHAR和TEXT之间的区别

Difference between VARCHAR and TEXT in mysql

当我们在MySQL中用VARCHAR列创建一个表时,我们必须为它设置长度。但对于TEXT型,我们不需要提供长度。

VARCHARTEXT有什么区别?


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有一个可变的最大尺寸MM = 21?-1。。。。。。。 你不能选择的大小对TEXT但是你不能为一个VARCHAR。。。。。。。 </P >

其他的是差分,安,你不能把指标(除A fulltext index)是一种TEXT柱。 所以如果你想有一指标之列,你要使用VARCHAR。。。。。。。但那时间的长度是一个指标也有限,所以如果你的VARCHAR柱太长的是你要使用只读第一几个人物的VARCHAR列在你的指标(见文献的方法CREATE INDEX)。 </P >

但是你也想要使用VARCHAR,如果你知道最大长度的可能的输入字符串的M是只读的,如a phone number或name或某样本。然后,你可以使用VARCHAR(30)去大学的TINYTEXTTEXT如果有人tries保存到文本的所有"三主之环"的书籍,在你的电话号码列只读存储你的第一个人物:30) </P >

编辑:如果你想文本存储在数据库是自然大于65535个字符,你要选择MEDIUMTEXTLONGTEXT,但要小心: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 >