今天順便測試了一下 他們三者是不同的,簡單的說就是
- null :nullbits 位圖上的差別。
- '':可變位元組多一個位元組。
- ' ':可變位元組多一個位元組且實際資料區域為0X20多一個位元組。
如下語句:
mysql> show create table testnull1 \G
*************************** 1. row ***************************
Table: testnull1
Create Table: CREATE TABLE `testnull1` (
`id` int(11) DEFAULT NULL,
`name` varchar(20) DEFAULT NULL,
`name1` varchar(10) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.00 sec)
mysql> insert into testnull1 values(1,'gaopeng','gaopeng');
Query OK, 1 row affected (0.22 sec)
mysql> insert into testnull1 values(1,'','gaopeng');
Query OK, 1 row affected (0.22 sec)
mysql> insert into testnull1 values(1,null,'gaopeng');
Query OK, 1 row affected (0.22 sec)
mysql> insert into testnull1 values(1,' ','gaopeng');
Query OK, 1 row affected (0.22 sec)
mysql> select * from testnull1;
+------+---------+---------+
| id | name | name1 |
+------+---------+---------+
| 1 | gaopeng | gaopeng |
| 1 | | gaopeng |
| 1 | NULL | gaopeng |
| 1 | | gaopeng |
+------+---------+---------+
4 rows in set (0.00 sec)
主要觀察第2,3,4行。
- 第二行:
07 00:2位元組可變字段長度,第二個00代表name 字段的長度,這裡''長度是0
00: null位圖
0000180025:fixed extrasize
0000012065100000000ec9e9b1000014210110:rowid+trx_id+rollback_ptr
80000001:資料1
67616f70656e67:資料‘gaopeng’
- 第三行
07:1位元組可變長度
02:null位圖
0000200026:fixed extrasize
0000012065110000000ec9eeb4000014060110:rowid+trx_id+rollback_ptr
- 第四行
0701:2位元組可變長度,01代表是name字段長度
00:null位圖
000028ff78:fixed extrasize
0000012065120000000ec9f0b6000014040110:rowid+trx_id+rollback_ptr
20:資料' '
可以看到他們的差別