栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

MySQL中VARCHAR和TEXT之间的区别

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

MySQL中VARCHAR和TEXT之间的区别

TL; DR

TEXT

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

VARCHAr(M)

  • 可变的最大
    M
    字符大小
  • M
    必须介于1到65535之间
  • 占用1 +
    c
    字节(对于
    M
    ≤255)或2 +
    c
    (对于
    M
    256≤≤65535)磁盘空间字节,其中
    c
    存储的字符串的长度
  • 可以是索引的一部分

更多细节

TEXT
具有 固定的 最大
2¹⁶-1 = 65535
字符大小。
VARCHAR
有一个 可变的 最大尺寸
M
可达
M = 2¹⁶-1

因此,您不能选择的大小,
TEXT
但可以选择
VARCHAR


另一个区别是,您不能在

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

但是

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
。您可以在此处了解更多信息。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/392796.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号