当前位置: 首页 > 面试题库 >

MySQL中VARCHAR和TEXT之间的区别

蔡修远
2023-03-14
问题内容

这个问题已经在这里有了答案

MySQL中的VARCHAR vs TEXT (3个答案)

3个月前关闭。

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

VARCHAR和之间有什么区别TEXT


问题答案:

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)代替TINYTEXTTEXT,如果有人尝试将所有三本《指环王》书籍的文本保存在电话号码栏中,则您只存储前30个字符:)

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

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

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

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

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



 类似资料:
  • 问题内容: jQuery的功能和之间有什么区别? 您将在哪里使用另一个? 问题答案: 适用于输入元素(或任何具有value属性的元素?),而不适用于输入元素。 获取输入元素的值- 与类型无关。获取所有匹配元素的innerText(不是HTML): 结果是一个字符串,其中包含所有匹配元素的组合文本内容。此方法对HTML和XML文档均适用。不能在输入元素上使用。对于输入字段文本,请使用val属性。 获

  • 问题内容: 我的问题是关于使用dot和in的细节。例如,以下几行返回相同的元素: 那么区别是什么呢?使用和的优点和缺点是什么? 问题答案: 和之间存在差异,但是由于您输入的文档,这种差异可能不会浮出水面。 如果您的输入文档看起来像(给定您的XPath表达式可以想象的最简单的文档) 例子1 然后和确实返回完全相同的结果。但是考虑一个看起来像下面的输入文档 例子2 其中该元素还有一个子元素,紧接在“问

  • 问题内容: 我发现与BeautifulSoup一起使用时有些奇怪,找不到任何文档来支持此操作,所以我想在这里询问。 假设我们有一个这样的标签,我们已经用BS对其进行了解析: 提取数据的官方记录方法是。但是,这为第二个标签提取了NoneType 。所以我尝试了(因为为什么不呢?),它完全按照我的意愿提取了一个空字符串。 但是,我在文档中找不到对此的任何引用,并且担心某些内容会丢失。谁能告诉我这是否可

  • 问题内容: 之间有什么区别 和 问题答案: 可以执行通配符匹配: 如果不需要模式匹配,请使用=代替LIKE。它更快,更安全。(您正在使用参数化查询,对吗?)

  • 问题内容: 我想明白之间的差别,只是简单地?功能上有区别吗?据我所知,它们是完全相同的。您是否可以对其中之一进行其他操作? 问题答案: –此属性使您可以为文本指定填充颜色。如果未设置,则将使用该属性进行填充。 是的,它们是相同的,但是如果两者具有不同的值,则它们将优先。 我认为这样做的理由是,您可以在使用时根据需要选择其他颜色,但是如果不可用(因此也不可行),它将优雅地退回到。在某些情况下,您可能

  • 问题内容: 我在MySQL中有一个消息表,该表记录了用户之间的消息。除了典型的ID和消息类型(所有整数类型)之外,我还需要将实际消息文本另存为VARCHAR或TEXT。我将前端限制设置为3000个字符,这意味着消息插入数据库的时间绝不会超过此时间。 是否有理由使用VARCHAR(3000)或TEXT?只是编写VARCHAR(3000)有点不合常理。我曾经在Stack Overflow上浏览过其他类