赞
踩
mysql> CREATE TABLE record_format_demo (
-> c1 VARCHAR(10),
-> c2 VARCHAR(10) NOT NULL,
-> c3 CHAR(10),
-> c4 VARCHAR(10)
-> ) CHARSET=ascii ROW_FORMAT=COMPACT;
Query OK, 0 rows affected (0.03 sec)
mysql> INSERT INTO record_format_demo(c1, c2, c3, c4) VALUES('aaaa', 'bbb', 'cc', 'd'), ('eeee', 'fff', NULL,
NULL);
Query OK, 2 rows affected (0.02 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> SELECT * FROM record_format_demo;
+------+-----+------+------+
| c1 | c2 | c3 | c4 |
+------+-----+------+------+
| aaaa | bbb | cc | d |
| eeee | fff | NULL | NULL |
+------+-----+------+------+
2 rows inset (0.00 sec)
我们知道Mysql支持一些变长的数据类型,比如VARCHAR(M)、各种TEXT类型,各种BLOG类型,我们也可以把拥有这些数据类型的列称为 变长字段,变长字段中存储多少字节的数据是不固定的,所以我们在存储真实数据的时候需要顺便把这些数据占用的字节也存起来。
由于是ascii字符集,所以每个字符占一个字节,所以变长列(这里不包含cc,因为是char)每个长度为 04 03 01,另外非常重要的一点是:变长字段长度列表是逆序排列的,所以最终的的列表为 01 03 04。
用图来表示就是:
提出问题:当列中出现NULL时怎么存储那?往下看
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。