INNODB: CREATE TABLE `test2` ( `col1` VARCHAR( 10 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL , `col2` VARCHAR( 10 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL , `col3` VARCHAR( 10 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL ) ENGINE = INNODB ; INSERT INTO `test` VALUES (null,1); INSERT INTO `test2` VALUES ('aaaaaaaa','','ccccccc'); INSERT INTO `test2` VALUES ('aaaaaaaa', NULL,'ccccccc'); mysql> select * from test; +------+------+ | col1 | col2 | +------+------+ | | 1 | | | NULL | | 1 | 2 | +------+------+ 3 rows in set (0.00 sec) mysql> select col1,length(col1),col2,length(col2) from test; +------+--------------+------+--------------+ | col1 | length(col1) | col2 | length(col2) | +------+--------------+------+--------------+ | | 0 | 1 | 1 | | | 0 | NULL | NULL | | 1 | 1 | 2 | 1 | +------+--------------+------+--------------+ select col1,hex(col1),col2,hex(col2) from test1; 查看页结构: python py_innodb_page_info.py -v /data/mysql/cwdtest/test2.ibd page offset 00000000, page type <File Space Header> page offset 00000001, page type <Insert Buffer Bitmap> page offset 00000002, page type <File Segment inode> page offset 00000003, page type <B-tree Node>, page level <0000> page offset 00000000, page type <Freshly Allocated Page> page offset 00000000, page type <Freshly Allocated Page> Total number of page: 6: Freshly Allocated Page: 2 Insert Buffer Bitmap: 1 File Space Header: 1 B-tree Node: 1 File Segment inode: 1 对该表数据文件做个hexdump: hexdump -C -v /data/mysql/cwdtest/test2.ibd >/tmp/udb.txt page type <B-tree Node>, page level <0000> 从第四个页开始,从hexdump中可找到相应的位置0x0000c000开始,16k*3=49152=0x0000c000 0000c000 c6 66 c2 4a 00 00 00 03 ff ff ff ff ff ff ff ff |.f.J............| 0000c010 00 00 00 00 00 28 69 70 45 bf 00 00 00 00 00 00 |.....(ipE.......| 0000c020 00 00 00 00 00 1f 00 02 00 cd 80 04 00 00 00 00 |................| 0000c030 00 ab 00 02 00 01 00 02 00 00 00 00 00 00 00 00 |................| 0000c040 00 00 00 00 00 00 00 00 00 31 00 00 00 1f 00 00 |.........1......| 0000c050 00 02 00 f2 00 00 00 1f 00 00 00 02 00 32 01 00 |.............2..| 0000c060 02 00 1e 69 6e 66 69 6d 75 6d 00 03 00 0b 00 00 |...infimum......| 0000c070 73 75 70 72 65 6d 75 6d 07 00 08 00 00 00 10 00 |supremum........| 0000c080 2a 00 00 00 00 02 13 00 00 00 00 0b 4c bd 00 00 |*...........L...| 0000c090 01 37 01 10 61 61 61 61 61 61 61 61 63 63 63 63 |.7..aaaaaaaacccc| 0000c0a0 63 63 63 07 08 01 00 00 18 ff c5 00 00 00 00 02 |ccc.............| 0000c0b0 14 00 00 00 00 0b 4d be 00 00 01 39 01 10 61 61 |......M....9..aa| 0000c0c0 61 61 61 61 61 61 63 63 63 63 63 63 63 00 00 00 |aaaaaaccccccc...| 0000c0d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 0000c0e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 0000c0f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 0000c100 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| mysql> select col1,hex(col1),col2,hex(col2),col3,hex(col3) from test2; +----------+------------------+------+-----------+---------+----------------+ | col1 | hex(col1) | col2 | hex(col2) | col3 | hex(col3) | +----------+------------------+------+-----------+---------+----------------+ | aaaaaaaa | 6161616161616161 | | | ccccccc | 63636363636363 | | aaaaaaaa | 6161616161616161 | NULL | NULL | ccccccc | 63636363636363 | +----------+------------------+------+-----------+---------+----------------+ 61 61 61 61 61 61 61 61 63 63 63 63 63 63 63 从上面col,col2,col3字段内容aaaaaaaaccccccc可以看出,在INNODB数据文件中,不管存放的是null还是'',col2字段并没有占用任何字符。 MYISAM: CREATE TABLE `test3` ( `col1` VARCHAR( 10 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL , `col2` VARCHAR( 10 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL , `col3` VARCHAR( 10 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL ) ENGINE = MYISAM ; INSERT INTO `test3` VALUES ('aaaaaaaa','','ccccccc'); INSERT INTO `test3` VALUES ('aaaaaaaa', NULL,'ccccccc'); INSERT INTO `test3` VALUES ('aaaaaaaa', NULL,''); select col1,hex(col1),col2,hex(col2),col3,hex(col3) from test3; +----------+------------------+------+-----------+---------+----------------+ | col1 | hex(col1) | col2 | hex(col2) | col3 | hex(col3) | +----------+------------------+------+-----------+---------+----------------+ | aaaaaaaa | 6161616161616161 | | | ccccccc | 63636363636363 | | aaaaaaaa | 6161616161616161 | NULL | NULL | ccccccc | 63636363636363 | +----------+------------------+------+-----------+---------+----------------+ 2 rows in set (0.00 sec) [root@cwdtest2 innodb]# hexdump -C -v /data/mysql/cwdtest/test3.MYD 00000000 03 00 13 01 fc 08 61 61 61 61 61 61 61 61 00 07 |......aaaaaaaa..| 00000010 63 63 63 63 63 63 63 00 03 00 13 01 fd 08 61 61 |ccccccc.......aa| 00000020 61 61 61 61 61 61 00 07 63 63 63 63 63 63 63 00 |aaaaaa..ccccccc.| 00000030 而MYISAM文件中是aaaaaaaa..ccccccc,相对应的16进制码是61 61 61 61 61 61 61 61 00 07 63 63 63 63 63 63 63 可以看到在col1和col3之间存在 00 07的字符 CREATE TABLE `test4` ( `col1` CHAR( 10 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL , `col2` CHAR( 10 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL , `col3` CHAR( 10 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL ) ENGINE = INNODB ; INSERT INTO `test4` VALUES ('aaaaaaaa','','ccccccc'); INSERT INTO `test4` VALUES ('aaaaaaaa', NULL,'ccccccc'); 0000bfd0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 0000bfe0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 0000bff0 00 00 00 00 00 00 00 00 19 45 b3 a5 00 28 85 c1 |.........E...(..| 0000c000 c9 db 1e 30 00 00 00 03 ff ff ff ff ff ff ff ff |...0............| 0000c010 00 00 00 00 00 28 96 f2 45 bf 00 00 00 00 00 00 |.....(..E.......| 0000c020 00 00 00 00 00 20 00 02 00 e1 80 04 00 00 00 00 |..... ..........| 0000c030 00 ba 00 02 00 01 00 02 00 00 00 00 00 00 00 00 |................| 0000c040 00 00 00 00 00 00 00 00 00 32 00 00 00 20 00 00 |.........2... ..| 0000c050 00 02 00 f2 00 00 00 20 00 00 00 02 00 32 01 00 |....... .....2..| 0000c060 02 00 1e 69 6e 66 69 6d 75 6d 00 03 00 0b 00 00 |...infimum......| 0000c070 73 75 70 72 65 6d 75 6d 0a 0a 0a 00 00 00 10 00 |supremum........| 0000c080 39 00 00 00 00 02 15 00 00 00 00 0b 56 c5 00 00 |9...........V...| 0000c090 01 50 01 10 61 61 61 61 61 61 61 61 20 20 20 20 |.P..aaaaaaaa | 0000c0a0 20 20 20 20 20 20 20 20 63 63 63 63 63 63 63 20 | ccccccc | 0000c0b0 20 20 0a 0a 01 00 00 18 ff b6 00 00 00 00 02 16 | ..............| 0000c0c0 00 00 00 00 0b 57 c6 00 00 01 51 01 10 61 61 61 |.....W....Q..aaa| 0000c0d0 61 61 61 61 61 20 20 63 63 63 63 63 63 63 20 20 |aaaaa ccccccc | 0000c0e0 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ...............| 0000c0f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 0000c000 8c 69 ae 6a 00 00 00 03 ff ff ff ff ff ff ff ff |.i.j............| 0000c010 00 00 00 00 00 29 6a a5 45 bf 00 00 00 00 00 00 |.....)j.E.......| 0000c020 00 00 00 00 00 21 00 02 00 e7 80 05 00 00 00 00 |.....!..........| 0000c030 00 c4 00 02 00 00 00 03 00 00 00 00 00 00 00 00 |................| 0000c040 00 00 00 00 00 00 00 00 00 33 00 00 00 21 00 00 |.........3...!..| 0000c050 00 02 00 f2 00 00 00 21 00 00 00 02 00 32 01 00 |.......!.....2..| 0000c060 02 00 1d 69 6e 66 69 6d 75 6d 00 04 00 0b 00 00 |...infimum......| 0000c070 73 75 70 72 65 6d 75 6d 08 00 00 00 00 10 00 22 |supremum......."| 0000c080 00 00 00 00 02 0d 00 00 00 00 0b 36 ab 00 00 01 |...........6....| 0000c090 22 01 10 61 61 61 61 61 61 61 61 07 01 00 00 18 |"..aaaaaaaa.....| 0000c0a0 00 22 00 00 00 00 02 0e 00 00 00 00 0b 37 ac 00 |."...........7..| 0000c0b0 00 01 23 01 10 63 63 63 63 63 63 63 08 08 00 20 |..#..ccccccc... | 0000c0c0 00 20 ff ac 00 00 00 00 02 0f 00 00 00 00 0b a1 |. ..............| 0000c0d0 76 00 00 01 72 01 10 68 68 68 68 68 68 68 68 78 |v...r..hhhhhhhhx| 0000c0e0 78 78 78 78 78 78 78 00 00 00 00 00 00 00 00 00 |xxxxxxx.........| 0000c0f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 0000c100 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 0000c110 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| mysql> optimize table test; +--------------+----------+----------+-------------------------------------------------------------------+ | Table | Op | Msg_type | Msg_text | +--------------+----------+----------+-------------------------------------------------------------------+ | cwdtest.test | optimize | note | Table does not support optimize, doing recreate + analyze instead | | cwdtest.test | optimize | status | OK | +--------------+----------+----------+-------------------------------------------------------------------+ 2 rows in set (0.03 sec) mysql> analyze table test; +--------------+---------+----------+----------+ | Table | Op | Msg_type | Msg_text | +--------------+---------+----------+----------+ | cwdtest.test | analyze | status | OK | +--------------+---------+----------+----------+ 0000c000 f0 d3 26 ea 00 00 00 03 ff ff ff ff ff ff ff ff |..&.............| 0000c010 00 00 00 00 00 29 7b ce 45 bf 00 00 00 00 00 00 |.....){.E.......| 0000c020 00 00 00 00 00 24 00 02 00 bc 80 04 00 00 00 00 |.....$..........| 0000c030 00 a2 00 02 00 00 00 02 00 00 00 00 00 00 00 00 |................| 0000c040 00 00 00 00 00 00 00 00 00 36 00 00 00 24 00 00 |.........6...$..| 0000c050 00 02 00 f2 00 00 00 24 00 00 00 02 00 32 01 00 |.......$.....2..| 0000c060 02 00 1d 69 6e 66 69 6d 75 6d 00 03 00 0b 00 00 |...infimum......| 0000c070 73 75 70 72 65 6d 75 6d 08 00 00 00 00 10 00 22 |supremum......."| 0000c080 00 00 00 00 02 0d 00 00 00 00 0b 36 ab 00 00 01 |...........6....| 0000c090 22 01 10 61 61 61 61 61 61 61 61 07 01 00 00 18 |"..aaaaaaaa.....| 0000c0a0 ff ce 00 00 00 00 02 0e 00 00 00 00 0b 37 ac 00 |.............7..| 0000c0b0 00 01 23 01 10 63 63 63 63 63 63 63 00 00 00 00 |..#..ccccccc....| 0000c0c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 0000c0d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 0000c0e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 0000c0f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 0000c100 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
MySQL null和''分析
来源:这里教程网
时间:2026-03-01 17:07:21
作者:
编辑推荐:
- MySQL null和''分析03-01
- 高频面试:如何解决MySQL主从复制延时问题03-01
- MySQL5.17异机迁移到MySQL 5.7.23基本步骤03-01
- SQL 基础知识扫盲03-01
- 故障分析 | MySQL 备份文件静默损坏一例分析03-01
- 技术分享 | 可能是目前最全的 MySQL 8.0 新特性解读(上)03-01
- 如何在DOCKER容器中运行MySQL服务03-01
- 推荐5款不常见的电脑软件,可以试试看03-01
下一篇:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- 高频面试:如何解决MySQL主从复制延时问题
高频面试:如何解决MySQL主从复制延时问题
26-03-01 - MySQL5.17异机迁移到MySQL 5.7.23基本步骤
MySQL5.17异机迁移到MySQL 5.7.23基本步骤
26-03-01 - SQL 基础知识扫盲
SQL 基础知识扫盲
26-03-01 - 技术分享 | 可能是目前最全的 MySQL 8.0 新特性解读(上)
技术分享 | 可能是目前最全的 MySQL 8.0 新特性解读(上)
26-03-01 - 推荐5款不常见的电脑软件,可以试试看
推荐5款不常见的电脑软件,可以试试看
26-03-01 - 我把MySQL运行在Docker上,如何避免采坑?
我把MySQL运行在Docker上,如何避免采坑?
26-03-01 - 一文带你弄懂 MySQL 的加锁规则!
一文带你弄懂 MySQL 的加锁规则!
26-03-01 - 推荐一款好用的数据一致性校验工具
推荐一款好用的数据一致性校验工具
26-03-01 - 技术分享 | 可能是目前最全的 MySQL 8.0 新特性解读(上)
技术分享 | 可能是目前最全的 MySQL 8.0 新特性解读(上)
26-03-01 - 重现一条简单SQL的优化过程
重现一条简单SQL的优化过程
26-03-01
