开发者社区> 问答> 正文

MySQL中VARCHAR和TEXT之间的区别?mysql

当我们在MySQL中创建带有VARCHAR列的表时,我们必须为其设置长度。但是对于TEXT类型,我们不必提供长度。

VARCHAR和之间有什么区别TEXT?

展开
收起
保持可爱mmm 2020-05-17 20:46:21 1197 0
1 条回答
写回答
取消 提交回答
  • TL; DR TEXT

    固定的最大大小为65535个字符(您不能限制最大大小) 占用2 + c字节的磁盘空间,其中c是存储的字符串的长度。 不能(完全)成为索引的一部分。需要指定一个前缀长度。 VARCHAR(M)

    可变的最大M字符大小 M 必须介于1到65535之间 占用1 + c字节(对于M≤255)或2 + c(对于M256≤≤65535)磁盘空间字节,其中c存储的字符串的长度 可以是索引的一部分 更多细节 TEXT具有固定的最大2¹⁶-1 = 65535字符大小。 VARCHAR有一个可变的最大尺寸M 可达 M = 2¹⁶-1。 因此,您不能选择的大小,TEXT但可以选择VARCHAR。

    另一个区别是,您不能在TEXT列上放置索引(全文索引除外)。 因此,如果您想在该列上建立索引,则必须使用VARCHAR。但是请注意,索引的长度也受到限制,因此,如果您的VARCHAR列太长,则仅需使用VARCHAR索引中列的前几个字符(请参阅参考资料中的CREATE INDEX)。

    但是VARCHAR,如果您知道可能的输入字符串的最大长度仅为M,例如电话号码或名称或类似名称,则也要使用。然后,您可以使用VARCHAR(30)代替TINYTEXT或TEXT,如果有人尝试将所有三本《指环王》书籍的文本保存在电话号码栏中,则您只存储前30个字符:)

    编辑:如果要存储在数据库中的文本长度超过65535个字符,则必须选择MEDIUMTEXT或LONGTEXT,但是要小心:MEDIUMTEXT存储的字符串最大为16 MB,LONGTEXT最大为4 GB。如果您使用LONGTEXT,并通过PHP获取数据(至少如果你使用mysqli无store_result),你可能得到一个内存分配错误,因为PHP尝试分配的内存4 GB,以确保整个字符串可以缓冲。除了PHP,其他语言也可能发生这种情况。

    但是,在将输入存储到数据库之前,应始终检查输入(是否太长?它是否包含奇怪的代码?)。

    注意:对于这两种类型,所需的磁盘空间仅取决于存储的字符串的长度,而不取决于最大长度。 例如,如果你使用的字符集latin1的,并存储在文本“测试” VARCHAR(30),VARCHAR(100)并且TINYTEXT,它总是需要5个字节(1个字节存储字符串的长度,每个字符1个字节)。如果将相同的文本存储在VARCHAR(2000)或TEXT列中,则也将需要相同的空间,但是,在这种情况下,它将是6个字节(2个字节用于存储字符串长度,每个字符1个字节)。

    有关更多信息,请参阅文档。

    最后,我想补充的通知,这两个,TEXT并且VARCHAR都是可变长度的数据类型,因此他们最有可能最大限度地减少空间,你需要存储的数据。但这需要权衡性能。如果您需要更好的性能,则必须使用固定长度类型,例如CHAR。您可以在此处了解更多信息。来源:stack overflow

    2020-05-17 20:51:57
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
搭建电商项目架构连接MySQL 立即下载
搭建4层电商项目架构,实战连接MySQL 立即下载
PolarDB MySQL引擎重磅功能及产品能力盛大发布 立即下载

相关镜像