我的编程空间,编程开发者的网络收藏夹
学习永远不晚

MySQL text和varchar区别

短信预约 信息系统项目管理师 报名、考试、查分时间动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码


	MySQL text和varchar区别


	MySQL text和varchar区别
[数据库教程]

从存储上讲:

  1.   - text 是要要进overflow存储。 也是对于text字段,不会和行数据存在一起。但原则上不会全部overflow ,
  2.   会有768字节和原始的行存储在一块,多于768的行会存在和行相同的Page或是其它Page上。
  3.    
  4.   - varchar 在MySQL内部属于从blob发展出来的一个结构,在早期版本中innobase中,也是768字节以后进行overfolw存储。
  5.    
  6.   - 对于Innodb-plugin后: 对于变长字段处理都是20Byte后进行overflow存储
  7.   (在新的row_format下:dynimic compress)

说完存储后,说一下使用这些大的变长字段的缺点:

  1.   - 在Innobase中,变长字段,是尽可能的存储到一个Page里,这样,如果使用到这些大的变长字段,会造成一个Page里能容纳的行
  2.   数很少,在查询时,虽然没查询这些大的字段,但也会加载到innodb buffer pool中,等于浪费的内存。
  3.   (buffer pool 的缓存是按page为单位)(不在一个page了会增加随机的IO)
  4.    
  5.   - 在innodb-plugin中为了减少这种大的变长字段对内存的浪费,引入了大于20个字节的,都进行overflow存储,
  6.   而且希望不要存到相同的page中,为了增加一个page里能存储更多的行,提高buffer pool的利用率。 这也要求我们,
  7.   如果不是特别需要就不要读取那些变长的字段。

那问题来了? 为什么varchar(255+)存储上和text很相似了,但为什么还要有varchar, mediumtext, text这些类型?
(从存储上来讲大于255的varchar可以说是转换成了text.这也是为什么varchar大于65535了会转成mediumtext)

我理解:这块是一方面的兼容,另一方面在非空的默认值上varchar和text有区别。从整体上看功能上还是差别的。

这里还涉及到字段额外开销的:

  1.   - varchar 小于255byte 1byte overhead
  2.   - varchar 大于255byte 2byte overhead
  3.    
  4.   - tinytext 0-255 1 byte overhead
  5.   - text 0-65535 byte 2 byte overhead
  6.   - mediumtext 0-16M 3 byte overhead
  7.    
  8.   - longtext 0-4Gb 4byte overhead

备注 overhead是指需要几个字节用于记录该字段的实际长度。

从处理形态上来讲varchar 大于768字节后,实质上存储和text差别不是太大了。 基本认为是一样的。
另外从8000byte这个点说明一下: 对于varcahr, text如果行不超过8000byte(大约的数,innodb data page的一半) ,overflow不会存到别的page中。基于上面的特性可以总结为text只是一个MySQL扩展出来的特殊语法有兼容的感觉。

默认值问题:

  1.   - 对于text字段,MySQL不允许有默认值。
  2.   - varchar允许有默认值

总结:

    1.   根据存储的实现: 可以考虑用varchar替代tinytext
    2.   如果需要非空的默认值,就必须使用varchar
    3.   如果存储的数据大于64K,就必须使用到mediumtext , longtext
    4.   varchar(255+)和text在存储机制是一样的
    5.    
    6.   需要特别注意varchar(255)不只是255byte ,实质上有可能占用的更多。
    7.    
    8.   特别注意,varchar大字段一样的会降低性能,所以在设计中还是一个原则大字段要拆出去,主表还是要尽量的瘦小

MySQL text和varchar区别

原文地址:https://www.cnblogs.com/lovezhr/p/14944523.html

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

MySQL text和varchar区别

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

MySQL text和varchar区别

从存储上讲: - text 是要要进overflow存储。 也是对于text字段,不会和行数据存在一起。但原则上不会全部overflow , 会有768字节和原始的行存储在一块,多于768的行会存在和行相同的Page或是其它Page上。   - varchar

	MySQL text和varchar区别
2016-02-16

mysql中varchar和char区别

mysql中的varchar和char数据类型之间存在以下区别:存储空间:varchar可变长,char固定长。性能:varchar检索和更新更快,char排序和查找更快。使用场景:varchar适合长度可变的字符串,char适合长度固定、
mysql中varchar和char区别
2024-05-01

mysql中varchar和nvarchar的区别

varchar 和 nvarchar 的主要区别在于支持的字符集:varchar 仅支持 ascii 或 latin1 字符集,而 nvarchar 支持 unicode 字符集,这意味着 nvarchar 可以存储更多种类的字符,包括中文
mysql中varchar和nvarchar的区别
2024-05-01

mysql中varchar和varchar2的区别

mysql 中 varchar 和 varchar2 的主要区别在于兼容性和范围限制。varchar 是 mysql 固有的数据类型,长度限制为 255 个字符,与其他数据库不兼容。varchar2 是 oracle 引入的数据类型,作为
mysql中varchar和varchar2的区别
2024-04-26

MYSQL中 char 和 varchar的区别

CHAR和VARCHAR类型相似,差别主要在存储,尾随空格和检索方式上。 CHAR和VARCHAR相同的是:CHAR和VARCHAR都指定了字符长度,注意是字符长度。例如char(30) 和 varchar(30)表示都可以存30个字符。有
2022-05-22

mysql中varchar和char的区别

mysql 中 varchar 和 char 数据类型的主要区别在于存储方式:char 以固定长度存储,而 varchar 根据实际字符串长度存储。char 适合长度固定的字符串,索引查找和比较操作更快,但存储空间浪费;varchar 适合
mysql中varchar和char的区别
2024-04-29

oracle中varchar和varchar2区别

varchar 和 varchar2 都是 oracle 中的字符串数据类型,区别在于:1. varchar 允许 null 值,而 varchar2 不允许;2. varchar 以隐式终止符 "\0" 结尾,而 varchar2 以显式
oracle中varchar和varchar2区别
2024-05-07

mysql innodb引擎中varchar和char的区别

一. 行记录格式innodb在存储数据的时候是以行的形式存储的,版本相关,并且有固定的格式。可以通过下面的语句查询当前所用版本的行记录格式:show table status like ‘表名‘;在版本5.6中默认使用格式是Compact,而在8.0中默认的格

	mysql innodb引擎中varchar和char的区别
2021-10-13

在mysql中char和varchar有什么区别

char和varchar是mysql中存储字符串的两种数据类型。char为固定长度,varchar为可变长度,且仅分配所需的最小存储空间。char字符串填充到指定长度,而varchar不填充。char基于固定长度比较,varchar基于实际
在mysql中char和varchar有什么区别
2024-04-26

编程热搜

目录