CREATE TABLE `test` (

`col1` VARCHAR( 10 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,

`col2` VARCHAR( 10 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL

) ENGINE = MYISAM ;

错误(不可以插入null值):

INSERT INTO `test` VALUES (null,1);

正确(插入''没问题):

INSERT INTO `test` VALUES ('',1);

INSERT INTO `test` VALUES ('', NULL);

INSERT INTO `test` VALUES ('1', '2');

检索(''不是null,所以not null会把''都算进去):

SELECT * FROM `test` WHERE col1 IS NOT NULL

结果:所有三条数据

检索(正常检索):

SELECT * FROM `test` WHERE col1 <> ''

结果:最后一条数据

检索(<>'',会同时排除''和null的数据,只检索有内容的数据):

SELECT * FROM `test` WHERE col2<>''

总结:

1. null的存储不是'',是其它特殊的字符表示。

2. null在检索<>''的时候,也会被排除,因为没有真正有意义的内容

3. not null严格按照字面意思,''不会被排除。

4. 定义not null的字段,可以插入''