”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > MySQL 中的 VARCHAR 与 TEXT:主要区别是什么?

MySQL 中的 VARCHAR 与 TEXT:主要区别是什么?

发布于2025-01-24
浏览:372

VARCHAR vs. TEXT in MySQL: What are the key differences?

MySQL 中 VARCHAR 和 TEXT 的区别

MySQL 中创建表时,VARCHAR 类型列的长度应设定明确。然而,对于 TEXT 类型,不必指定长度。那么 VARCHAR 和 TEXT 之间有何区别?

TL;DR

TEXT

  • 固定最大长度 65535 个字符(无法限制最大长度)
  • 占用磁盘空间 2 c 字节,其中 c 为存储字符串的长度
  • 无法(完全)索引,需要指定前缀长度

VARCHAR(M)

  • 可变最大长度 M 个字符
  • M 应在 1 到 65535 之间
  • 占用磁盘空间 1 c 字节(M ≤ 255)或 2 c 字节(256 ≤ M ≤ 65535),其中 c 为存储字符串的长度
  • 可索引

详细说明

TEXT 的最大长度固定为 2¹⁶-1 = 65535 个字符,而 VARCHAR 的最大长度可变,最多为 2¹⁶-1。因此,TEXT 的大小不可选择,而 VARCHAR 可以选择。

另一个区别是不允许对 TEXT 列创建索引(全文索引除外)。因此,若要对该列进行索引,必须使用 VARCHAR。但请注意索引的长度也有限制,如果 VARCHAR 列过长,则索引只能使用 VARCHAR 列的前几个字符(参见CREATE INDEX 文档)。

如果你知道可能输入字符串的最大长度只有 M,例如电话号码或姓名,那么也应使用 VARCHAR。然后,你可以使用 VARCHAR(30) 而不是 TINYTEXT 或 TEXT,这样即使有人尝试在你用于存储电话号码的列中保存完整的《指环王》文本,你只需要存储前 30 个字符 :)

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

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

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

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

最后,我想补充一点,TEXT 和 VARCHAR 都是可变长度数据类型,因此它们很可能会最大程度地减少存储数据所需的空

最新教程 更多>
  • MySQL动态更新列使用INNER JOIN方法
    MySQL动态更新列使用INNER JOIN方法
    MySQL动态更新关联表列数据 本文介绍如何在MySQL中使用INNER JOIN动态更新目标表中的列。 我们的目标是根据共享的名称属性,将源表(tableA)中对应列的值更新到目标表(tableB)中的列。 可以使用以下UPDATE语句实现: UPDATE tableB INNER JOIN ...
    编程 发布于2025-04-19
  • 如何使用Python理解有效地创建字典?
    如何使用Python理解有效地创建字典?
    在python中,词典综合提供了一种生成新词典的简洁方法。尽管它们与列表综合相似,但存在一些显着差异。与问题所暗示的不同,您无法为钥匙创建字典理解。您必须明确指定键和值。 For example:d = {n: n**2 for n in range(5)}This creates a dicti...
    编程 发布于2025-04-19
  • 为什么使用Firefox后退按钮时JavaScript执行停止?
    为什么使用Firefox后退按钮时JavaScript执行停止?
    导航历史记录问题:JavaScript使用Firefox Back Back 此行为是由浏览器缓存JavaScript资源引起的。要解决此问题并确保在后续页面访问中执行脚本,Firefox用户应设置一个空功能。 警报'); }; alert('inline Alert')...
    编程 发布于2025-04-19
  • Python中何时用"try"而非"if"检测变量值?
    Python中何时用"try"而非"if"检测变量值?
    使用“ try“ vs.” if”来测试python 在python中的变量值,在某些情况下,您可能需要在处理之前检查变量是否具有值。在使用“如果”或“ try”构建体之间决定。“ if” constructs result = function() 如果结果: 对于结果: ...
    编程 发布于2025-04-19
  • 如何在Chrome中居中选择框文本?
    如何在Chrome中居中选择框文本?
    选择框的文本对齐:局部chrome-inly-ly-ly-lyly solument 您可能希望将文本中心集中在选择框中,以获取优化的原因或提高可访问性。但是,在CSS中的选择元素中手动添加一个文本 - 对属性可能无法正常工作。初始尝试 state)</option> < op...
    编程 发布于2025-04-19
  • 您可以使用CSS在Chrome和Firefox中染色控制台输出吗?
    您可以使用CSS在Chrome和Firefox中染色控制台输出吗?
    在javascript console 中显示颜色是可以使用chrome的控制台显示彩色文本,例如红色的redors,for for for for错误消息?回答是的,可以使用CSS将颜色添加到Chrome和Firefox中的控制台显示的消息(版本31或更高版本)中。要实现这一目标,请使用以下模...
    编程 发布于2025-04-19
  • 如何修复\“常规错误:2006 MySQL Server在插入数据时已经消失\”?
    如何修复\“常规错误:2006 MySQL Server在插入数据时已经消失\”?
    How to Resolve "General error: 2006 MySQL server has gone away" While Inserting RecordsIntroduction:Inserting data into a MySQL database can...
    编程 发布于2025-04-19
  • PHP如何在MySQL数据库中存储IP地址?
    PHP如何在MySQL数据库中存储IP地址?
    MySQL数据库IP地址使用PHP 使用PHP中存储IP地址时,使用PHP存储IP地址时,考虑到适当的字段类型和存储方法是至关重要的。 type 地址最合适的字段类型是int。尽管显然不匹配,但此选择还是由通过PHP IP2长函数从IP地址到整数的有效转换过程驱动的。要检索原始IP地址,可以使用...
    编程 发布于2025-04-19
  • 查找当前执行JavaScript的脚本元素方法
    查找当前执行JavaScript的脚本元素方法
    如何引用当前执行脚本的脚本元素在某些方案中理解问题在某些方案中,开发人员可能需要将其他脚本动态加载其他脚本。但是,如果Head Element尚未完全渲染,则使用document.getElementsbytagname('head')[0] .appendChild(v)的常规方...
    编程 发布于2025-04-19
  • 10款在线定制GIF制作工具推荐
    10款在线定制GIF制作工具推荐
    [2 在这篇文章中,我们收集了10种免费的在线GIF Maker工具,以制作您自己的自定义Ajax装载机 。易于创建自己的图像即可创建自己的自定义动画。 相关文章: 5在线加载ajax旋转器生成器工具 1。 gifmake.com 与(GIF,JPEG,PNG)构成图片,也可以分解动画gif。...
    编程 发布于2025-04-19
  • 如何使用PHP从XML文件中有效地检索属性值?
    如何使用PHP从XML文件中有效地检索属性值?
    从php $xml = simplexml_load_file($file); foreach ($xml->Var[0]->attributes() as $attributeName => $attributeValue) { echo $attributeName,...
    编程 发布于2025-04-19
  • 为什么HTML无法打印页码及解决方案
    为什么HTML无法打印页码及解决方案
    无法在html页面上打印页码? @page规则在@Media内部和外部都无济于事。 HTML:Customization:@page { margin: 10%; @top-center { font-family: sans-serif; font-weight: bo...
    编程 发布于2025-04-19
  • 如何有效地选择熊猫数据框中的列?
    如何有效地选择熊猫数据框中的列?
    在处理数据操作任务时,在Pandas DataFrames 中选择列时,选择特定列的必要条件是必要的。在Pandas中,选择列的各种选项。选项1:使用列名 如果已知列索引,请使用ILOC函数选择它们。请注意,python索引基于零。 df1 = df.iloc [:,0:2]#使用索引0和1 c...
    编程 发布于2025-04-19
  • 解决MySQL错误1153:数据包超出'max_allowed_packet'限制
    解决MySQL错误1153:数据包超出'max_allowed_packet'限制
    mysql错误1153:故障排除比“ max_allowed_pa​​cket” bytes 更大的数据包,用于面对阴谋mysql错误1153,同时导入数据capase doft a Database dust?让我们深入研究罪魁祸首并探索解决方案以纠正此问题。理解错误此错误表明在导入过程中接...
    编程 发布于2025-04-19
  • 在PHP中如何高效检测空数组?
    在PHP中如何高效检测空数组?
    在PHP 中检查一个空数组可以通过各种方法在PHP中确定一个空数组。如果需要验证任何数组元素的存在,则PHP的松散键入允许对数组本身进行直接评估:一种更严格的方法涉及使用count()函数: if(count(count($ playerList)=== 0){ //列表为空。 } 对...
    编程 发布于2025-04-19

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3