在 SQL Server 中,为什么一个 tinyint 以 9B 存储在行中。出于某种原因,在 NULL 位图掩码的末尾似乎还有一个额外的字节。
使用临时数据库;
走
创建表 tbl
(
我 TINYINT 不为空
);
走
插入 tbl (i)
值 (1) ;
走
DBCC IND ('tempdb','tbl',-1) ;
走
DBCC TRACEON (3604) ; -- 页面转储将进入控制台
走
DBCC 页面 ('tempdb',1,168,3);
走
结果(由于 DBCC PAGE 首先显示最低有效字节,因此我颠倒了字节):
Record Size = 9B
10000500 01010000 00
TagA = 0x10 = 1B
TagB = 0x00 = 1B
Null Bitmap Offset = 0x0005 = 2B
Our integer column = 0x01 = 1B
Column Count …Run Code Online (Sandbox Code Playgroud) 问题:
有什么方法可以计算表创建占用的字节数,我知道您可以从information_schema.tables 中获取一些信息,但该信息不够准确。
实际需要的只是innodb表定义的字节数,collation也可以认为是utf-8-general-ci
例如表测试如下
创建表测试
(
col1 varchar(25),
col2 int,
col3 varchar(3),
col4 char(15),
col5 datetime
);
现在需要知道根据表中列的类型可以在一行中累积的总行大小。
在 MSSQL 中找到了某种类似的解决方案,但需要它的 MySQL 版本
任何帮助深表感谢。