格式
老版本分为Compact、Redundant两种格式,区别在于行的存储内容。Compact不会存储可变长度和固定长度的null值,Redundant会存储固定长度的null值。
4.1版本之前,varchar(n)的n表示字符的长度,varchar支持的最大长度是65535,指的是字节且是列中所有varchar长度之和不超过65535.
老版本的行溢出数据存储在uncompressed blob page中。数据页只存储前768字节的数据,之后是偏移量,指向行溢出页,即uncompressed blob page。
如果每页中能存放两条记录,那些将不会有溢出数据。
新版本格式为Compressed、Dynamic。对于大文本的存储使用了完全溢出的方式。数据页只存储20字节的指针,指向off page.
Compressed会对数据以zlib的算法进行压缩。
char的行存储结构
4.1版本开始,char(n)中的n代表的是字符的长度。在多字节字符集的情况下,可变长度和固定长度实际行存储基本没有区别。但是对于未填充满的位置依然使用0x20占位。
约束
数据完整性:
1.实体完整性保证表中有一个主键。2.用户可以用primary key或unique key保证实体完整性。3.使用触发器保证数据完整性。
约束是一个逻辑的概念。索引不仅仅是逻辑的概念,在数据库中还代表着物理存储的方式。
