返回顶部
首页 > 资讯 > 数据库 >mysql中varchar与text具体区别
  • 446
分享到

mysql中varchar与text具体区别

2024-04-02 19:04:59 446人浏览 泡泡鱼
摘要

本文主要给大家简单讲讲Mysql中varchar与text具体区别,相关专业术语大家可以上网查查或者找一些相关书籍补充一下,这里就不涉猎了,我们就直奔主题吧,希望mysql中varchar与text具体区别

本文主要给大家简单讲讲Mysql中varchar与text具体区别,相关专业术语大家可以上网查查或者找一些相关书籍补充一下,这里就不涉猎了,我们就直奔主题吧,希望mysql中varchar与text具体区别这篇文章可以给大家带来一些实际帮助。

大小对比
VARCHAR:varchar在mysql中必须满足最大行宽度限制,也就是 65535(64k)字节,而varchar本身是按字符串个数来定义的,在mysql中使用uft-8字符集一个字符占用三个字节,所以单表varchar实际占用最大长度如下.
    1.使用utf-8字符编码集varchar最大长度是(65535-2)/3=21844个字符(超过255个字节会有2字节的额外占用空间开销,所以减2,如果是255以下,则减1)。
    2.使用utf-8mb4字符集,mysql中使用 utf-8mb4 字符集一个字符占用4个字节,所以 varchar 最大长度是(65535-2)/4=16383 个字符(超过255个字节会有2字节的额外占用空间开销,所以减2,如果是255以下,则减1)。

注意:如果使用utf-8mb4字符集时,有些需要存储utf-8字符的时候,还是会只占3字节,所以有时会比这个计算值能存更多个字符,因为utf-8mb4是utf-8的超集.


TEXT:最大限制也是64k个字节,但是本质是溢出存储,innodb默认只会存放前768字节在数据页中,而剩余的数据则会存储在溢出段中,虽然也受单表65535最大行宽度限制,但mysql表中每个BLOB和TEXT列实际只占其中的5至9个字节,其他部分将进行溢出存储.所以实际占用表最大行宽度为9+2字节,外加的是额外开销,跟表的实际宽度没有关系.
    1.如果使用utf-8字符集,那么单字段占用最大长度也是21844个字符.
    2.不过单表可以设置多个text字段,这就突破了单表最大行宽度65535的限制

注意:如果采用了新的行格式类型Barracuda (梭子鱼),该文件格式拥有新的两种行格式:compressed和dynamic,两种格式对blob/text字段采用完全溢出的方式,数据页中只存放20字节,其余的都存放在溢出段中.


其他text:

text字段是分长中短类型,不像varchar只有一种,除了上面的text,还有下面三个.

TinyText:最大长度255个字节,实际上是个没什么意义的类型了.

MEDIUMTEXT:最大长度限制16M个字节。和普通text一样也支持溢出存储,所以实际占用表最大行宽度为9+3字节,外加的是额外开销
LONGTEXT:最大长度限制4G个字节。和普通text一样也支持溢出存储,所以实际占用表最大行宽度为9+4字节,外加的是额外开销

----------------------------------------

示例:

#VARCHAR单表单字段最长不能超过21844
CREATE TABLE test(
    va VARCHAR(21845)
)DEFAULT CHARSET=utf8;
[Err] 1118 - Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs
#这样就可以了
CREATE TABLE test(
    va VARCHAR(21844)
)DEFAULT CHARSET=utf8;
受影响的行: 0
时间: 0.155s
#虽然每个BLOB和TEXT列 账户只占其中的5至9个字节。但是还不够
CREATE TABLE test(
    va VARCHAR(21841),
    tx text
)DEFAULT CHARSET=utf8;
[Err] 1118 - Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs
#然后9+2就可以了
CREATE TABLE test(
    va VARCHAR(21840),
    tx text
)DEFAULT CHARSET=utf8;
受影响的行: 0
时间: 0.170s

--------------------------------------------------------

额外占用空间开销说明:
varchar 小于255byte  1byte overhead
varchar 大于255byte  2byte overhead
tinytext 0-255 1 byte overhead
text 0-65535 byte 2 byte overhead
mediumtext 0-16M  3 byte overhead
longtext 0-4Gb 4byte overhead

注意:

虽然text字段会把超过768字节的大部分数据溢出存放到硬盘其他空间,看上去是会更加增加磁盘压力.但从处理形态上来讲varchar大于768字节后,实质上存储和text差别不是太大了.因为超长的varchar也是会用到溢出存储,读取该行也是要去读硬盘然后加载到内存,基本认为是一样的。

另外从8000byte这个点说明一下,mysql的innodb data page默认一个数据页是16K,要存两行数据,所以对于varcahr, text如果一行数据不超过8000byte ,overflow不会存到别的page中。
----------------------------------------


差异点:
text字段,MySQL不允许有默认值。建立索引必须给出前缀索引长度.
varchar允许有默认值,对索引长度没限制,

注意:

InnoDB引擎单一字段索引的默认长度最大为767字节,myisam为1000字节.例如字符编码是utf8,那么varchar的索引最大长度是256个字符.超出限制会导致索引创建不成功,转而需要创建前缀索引.设置innodb_large_prefix=1可以增大限制,允许索引使用动态压缩,但是表的row_fORMat必须是compressed或者dynamic.可以使索引列长度大于767bytes,但是总长度不能大于3072 bytes.
----------------------------------------

总结
  根据存储的实现:可以考虑用varchar替代text,因为varchar存储更弹性,存储数据少的话性能更高
  如果需要非空的默认值,就必须使用varchar
  如果存储的数据大于64K,就必须使用到mediumtext , longtext,因为varchar已经存不下了
  如果varchar(255+)之后,和text在存储机制是一样的,性能也相差无几
  需要特别注意varchar(255)不只是255byte ,实质上有可能占用的更多。

mysql中varchar与text具体区别就先给大家讲到这里,对于其它相关问题大家想要了解的可以持续关注我们的数据库。我们的板块内容每天都会捕捉一些行业新闻及专业知识分享给大家的。

您可能感兴趣的文档:

--结束END--

本文标题: mysql中varchar与text具体区别

本文链接: https://lsjlt.com/news/34600.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • mysql中varchar与text具体区别
    本文主要给大家简单讲讲mysql中varchar与text具体区别,相关专业术语大家可以上网查查或者找一些相关书籍补充一下,这里就不涉猎了,我们就直奔主题吧,希望mysql中varchar与text具体区别...
    99+
    2024-04-02
  • MySQL text和varchar区别
    从存储上讲:   - text 是要要进overflow存储。 也是对于text字段,不会和行数据存在一起。但原则上不会全部overflow ,   会有768字节和原始的行存储在一块,多于768的行会存在和行相同的Page或...
    99+
    2016-02-16
    MySQL text和varchar区别 数据库入门 数据库基础教程 数据库 mysql
  • mysql中varchar和 text的区别
    深入理解MySQL中varchar和text的区别 1. 引言 在MySQL数据库中,varchar和text是常见的数据类型,用于存储文本数据。虽然它们都可以用于存储字符串,但它们在存储容量、性能影...
    99+
    2023-09-21
    mysql 数据库
  • MySQL中char、varchar和text三者的区别是什么
    今天就跟大家聊聊有关MySQL中char、varchar和text三者的区别是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。具体说明:char:...
    99+
    2024-04-02
  • SQL中char nchar varchar nvarchar text ntext的区别
         类型长度使用说明长度说明char(n)定长索引效率高,程序里面使用trim去除多余的空白n必须是一个介于1和8000之间的数值,存储大小为n个字节varch...
    99+
    2024-04-02
  • mysql与oracle的具体区别
    mysql与oracle的具体区别 本质的区别 Oracle数据库是一个对象关系数据库管理系统(ORDBMS)。它通常被称为Oracle RDBMS或简称为Oracle,是一个收费的数据库。 MySQL是一个开源的关系数据库管理系统(RDB...
    99+
    2023-09-02
    数据库 mysql oracle
  • mysql的varchar与text对比
    varchar和text是mysql字符存储争议比较多的领域,究竟大字段用那个比较好,我们来对比一下,然后自行选择.大小对比VARCHAR:varchar在mysql中必须满足最大行宽度限制,也就是 655...
    99+
    2024-04-02
  • mysql中的char与varchar有什么区别
    这篇文章将为大家详细讲解有关mysql中char与varchar的区别,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。varchar类型用于存储可变长的字符串,是比较常见常...
    99+
    2024-04-02
  • Mysql中varchar与char的区别有哪些
    这篇文章给大家分享的是有关Mysql中varchar与char的区别有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。mysql中varchar与char的区别以及varcha...
    99+
    2024-04-02
  • mysql中varchar和char区别
    mysql中的varchar和char数据类型之间存在以下区别:存储空间:varchar可变长,char固定长。性能:varchar检索和更新更快,char排序和查找更快。使用场景:va...
    99+
    2024-05-01
    mysql
  • MYSQL中 char 和 varchar的区别
    CHAR和VARCHAR类型相似,差别主要在存储,尾随空格和检索方式上。 CHAR和VARCHAR相同的是:CHAR和VARCHAR都指定了字符长度,注意是字符长度。例如char(30) 和 varcha&...
    99+
    2022-05-22
    MySQL char MySQL varchar
  • mysql中varchar和varchar2的区别
    mysql 中 varchar 和 varchar2 的主要区别在于兼容性和范围限制。varchar 是 mysql 固有的数据类型,长度限制为 255 个字符,与其他数据库不兼容。va...
    99+
    2024-04-26
    mysql oracle
  • mysql中varchar和char的区别
    mysql 中 varchar 和 char 数据类型的主要区别在于存储方式:char 以固定长度存储,而 varchar 根据实际字符串长度存储。char 适合长度固定的字符串,索引查...
    99+
    2024-04-29
    mysql
  • mysql中varchar和nvarchar的区别
    varchar 和 nvarchar 的主要区别在于支持的字符集:varchar 仅支持 ascii 或 latin1 字符集,而 nvarchar 支持 unicode 字符集,这意味...
    99+
    2024-05-01
    mysql
  • MySql中Blob与Text的区别是什么
    本篇文章给大家分享的是有关MySql中Blob与Text的区别是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。 BLOB是一个二进制大对...
    99+
    2024-04-02
  • char、varchar、nchar、nvarchar、text之间有什么区别
    这篇文章给大家分享的是有关char、varchar、nchar、nvarchar、text之间有什么区别的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。char、varchar、n...
    99+
    2024-04-02
  • 当面试官问mysql中char与varchar的区别
    目录char与varchar的区别char与varchar的区别 以上就是当面试官问mysql中char与varchar的区别的详细内容,更多关于char与varchar...
    99+
    2024-04-02
  • Mysql术语 --basedir与ledir有何具体区别
    下文我给大家简单讲讲关于Mysql术语  --basedir与ledir有何具体区别,大家之前了解过相关类似主题内容吗?感兴趣的话就一起来看看这篇文章吧,相信看完Mysql术语  --b...
    99+
    2024-04-02
  • mysql char 和varchar的区别?
    char 和varchar的区别 char 一定会使用指定的空间,varchar是根据数据来定空间 2、 char的插入数据效率理论上比varchar高:varchar是需要通过后面的记录数来计算 ...
    99+
    2023-09-22
    mysql 数据库
  • MySQL中varchar和char类型的区别
    目录前述VARCHAR类型VARCHAR适用情况CHAR类型测试VARCHAR(5)与VARCHAR(200)的区别总结前述 VARCHAR和CHAR是两种最主要的字...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作