iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 > mysql innodb引擎中varchar和char的区别
  • 418
分享到

mysql innodb引擎中varchar和char的区别

摘要

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


	mysql innodb引擎中varchar和char的区别
[数据库教程]

一. 行记录格式

innodb在存储数据的时候是以行的形式存储的,版本相关,并且有固定的格式。可以通过下面的语句查询当前所用版本的行记录格式:

show table status like 表名;

在版本5.6中默认使用格式是Compact,而在8.0中默认的格式是Dynamic。本文描述的是Compact格式下的行记录。版本查询可以使用语句‘select version();’。

Compact格式是5.0引入的,目的是为了高效存储数据。其存储方式如下:

变长字段长度列表

NULL标志位

记录头信息

1数据

2数据

...

 

 

 

1、变长字段长度列表,注意断句为变长字段-长度-列表。

  a) 其描述了行记录中存储内容长度不固定的字段所占用的字节数

  b) 按照列的顺序逆序存放

  c) 若列的长度小于255个字节,则用一个字节描述

  d) 若列的长度大于255个字节,则用两个字节描述

  e) 变长字段的长度不能大于65535个字节,所以,最多用两个字节描述其长度:2^16=65536

NULL标志位指示该行数据中是否有null值,有则用1表示,占用1个字节(占用一个字节是书里写的,但是实验下来发现也并非如此,对于书里的内容还是不能全信啊)。

记录头信息如下图所示:

技术图片

数据列

5、两个隐藏列:事务ID和回滚指针 

  a) 事务ID:占用6个字节,描述最新更新该行的事务的ID

  b) 回滚指针:占用7个字节,指向undo log链,用于回滚和mvcc

6、没有主键,每行回增加一个6字节的rowid

 

现在通过一个表来具体看一下某一行在底层的存储内容,建表语句及插入数据如下所示:

create table mytest(
t1 varchar(10),
t2 varchar(10),
t3 char(10),
t4 varchar(10)
)engine=innodb charset=latin1 row_fORMat=compact;

insert into mytest
values
(a, bb,bb,ccc),
(d,ee,ee,fff),
(d, null, null, fff);

通过vscode打开数据表的存储文件mytest.ibd,找到数据记录存储的位置,如下所示:

技术图片

通过分析其二进制内容,找到第一行记录的位置,分析其内容如下:

03 02 01  
00   
00 00 10 00 2C  
00 00 00 00 02 00  
00 00 00 00 05 50   
B7 00 00 01 2B 01 10   
61  
62 62  
62 62 20 20 20 20 20 20 20 20   
63 63 63   

 

从上面可以看到,变长字段长度列表是逆序的,char字段未使用的位会用0x20(空格)表示。

第三条记录的二进制表示如下:

03 01  
06   
00 00 20 FF 98  
00 00 00 00 02 02   
00 00 00 00 05 50  
B7 00 00 01 2B 01 2C  
64   
66 66 66  

Mysql innodb引擎中varchar和char的区别

原文地址:https://www.cnblogs.com/zhanGCaiwang/p/14375890.html

您可能感兴趣的文档:

--结束END--

本文标题: mysql innodb引擎中varchar和char的区别

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

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

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • mysql innodb引擎中varchar和char的区别
    一. 行记录格式 innodb在存储数据的时候是以行的形式存储的,版本相关,并且有固定的格式。可以通过下面的语句查询当前所用版本的行记录格式: show table status like ‘表名‘; 在版本5.6中默认使用格式是Com...
    99+
    2021-10-13
    mysql innodb引擎中varchar和char的区别 数据库入门 数据库基础教程 数据库 mysql
  • MYSQL中 char 和 varchar的区别
    CHAR和VARCHAR类型相似,差别主要在存储,尾随空格和检索方式上。 CHAR和VARCHAR相同的是:CHAR和VARCHAR都指定了字符长度,注意是字符长度。例如char(30) 和 varcha&...
    99+
    2022-05-22
    MySQL char MySQL varchar
  • 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+
    2022-11-12
  • mysql中char和varchar的区别有哪些
    本篇内容主要讲解“mysql中char和varchar的区别有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“mysql中char和varchar的区别有哪些...
    99+
    2022-10-19
  • MySQL中varchar和char类型有什么区别
    本篇内容介绍了“MySQL中varchar和char类型有什么区别”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!VARCHAR类型VARCH...
    99+
    2023-06-25
  • mysql中的char与varchar有什么区别
    这篇文章将为大家详细讲解有关mysql中char与varchar的区别,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。varchar类型用于存储可变长的字符串,是比较常见常...
    99+
    2022-10-18
  • Mysql中varchar与char的区别有哪些
    这篇文章给大家分享的是有关Mysql中varchar与char的区别有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。mysql中varchar与char的区别以及varcha...
    99+
    2022-10-18
  • MySQL字符串类型中VARCHAR和CHAR的区别
    前述VARCHAR和CHAR是两种最主要的字符串类型。不幸的是,很难精确地解释这些值是怎么存储在磁盘和内存中的,因为这跟存储引擎的具体实现有关。下面的描述假设使用的存储引擎是InnoDB和/或者MyISAM...
    99+
    2022-10-18
  • mysql数据库引擎 MyISAM和 InnoDB区别
    1、 存储结构MyISAM:每个MyISAM在磁盘上存储成三个文件。第一个文件的名字以表的名字开始,扩展名指出文件类型。.frm文件存储表定义。数据文件的扩展名为.MYD (MYData)。索引文件的扩展名...
    99+
    2022-10-18
  • MySQL中char、varchar和text三者的区别是什么
    今天就跟大家聊聊有关MySQL中char、varchar和text三者的区别是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。具体说明:char:...
    99+
    2022-10-18
  • 当面试官问mysql中char与varchar的区别
    目录char与varchar的区别char与varchar的区别 以上就是当面试官问mysql中char与varchar的区别的详细内容,更多关于char与varchar...
    99+
    2022-11-12
  • MyISAM和InnoDB存储引擎的区别
    目录 前言存储引擎 区别事务外键表单的存储数据查询效率数据更新效率 如何选择 前言 MyISAM和InnoDB是使用MySQL最常用的两种存储引擎,在5.5版本之前默认采用MyISAM存储引擎,从5.5开始采用InnoD...
    99+
    2023-08-17
    数据库 mysql java
  • MySQL的MyISAM和InnoDB引擎的主要区别是什么?
    1.MyISAM不支持事务,而InnoDB支持。InnoDB的AUTOCOMMIT默认是打开的,即每条SQL语句会默认被封装成一个事务,自动提交,这样会影响速度,所以最好是把多条SQL语句显示放在begin...
    99+
    2022-10-18
  • SQL中char nchar varchar nvarchar text ntext的区别
         类型长度使用说明长度说明char(n)定长索引效率高,程序里面使用trim去除多余的空白n必须是一个介于1和8000之间的数值,存储大小为n个字节varch...
    99+
    2022-10-18
  • InnoDB与MyISAM存储引擎的区别
    InnoDB和MyISAM存储引擎的不同点:InnoDB存储引擎:当前MySQL存储引擎中的主流,InnoDB存储引擎支持事务、支持行锁、支持非锁定读、支持外键。MyISAM存储引擎:MyISAM不支持事务...
    99+
    2022-10-18
  • MySQL CHAR和VARCHAR存储、读取时的差别
    导读 你真的知道CHAR和VARCHAR类型在存储和读取时的区别吗? 还是先抛几条结论吧: 存储的时候,CHAR总是会补足空格后再存储,不管用户插入数据时尾部有没有包含空格。 存储的时候,VARCHAR不会先补足空格...
    99+
    2022-05-24
    MySQL char MySQL varchar
  • mysql中varchar和 text的区别
    深入理解MySQL中varchar和text的区别 1. 引言 在MySQL数据库中,varchar和text是常见的数据类型,用于存储文本数据。虽然它们都可以用于存储字符串,但它们在存储容量、性能影...
    99+
    2023-09-21
    mysql 数据库
  • MYSQL INNODB主键使用varchar和int的区别是什么
    这篇文章主要介绍“MYSQL INNODB主键使用varchar和int的区别是什么”,在日常操作中,相信很多人在MYSQL INNODB主键使用varchar和int的区别是什么问题上存在疑惑,小编查阅了...
    99+
    2022-10-18
  • MySQL中的char和varchar&mysql中varchar能存多少汉字、数字,以及varchar(100)和varchar(10)的区别
    1、varchar能存多少汉字、数字? 具体还是要看版本的,一个字符占用3个字节 ,一个汉字(包括数字)占用3个字节=一个字符4.0版本以下,varchar(100),指的是100字节,如果...
    99+
    2023-09-05
    Java MySQL char varchar
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作