mysql---varchar类型字段该不该设置可以为空或不为空

标签:
it |
分类: MYSQL |
习惯:我经常设置为空默认DEFAULT NULL
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(128) NOT NULL,
`password` varchar(128) NOT NULL,
`email` varchar(128) NOT NULL,
`sex` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
问题:
新建一个user表字段为:
CREATE TABLE `user` (
) ENGINE=InnoDB AUTO_INCREMENT=24 DEFAULT CHARSET=utf8;
然而我把sex设置为null
数据显示:
我想查sex值不等于1的值:
SELECT * from user where sex<>'1'
我预想的数据应该是这23条数据都可以查出来,可是查出来的结果:
http://s6/mw690/004bIdzyzy7ogaP8EGp95&690
只有这一条。字段为null的也不等于1,但是查询null条件要这么写:SELECT * from user where sexis
null.所以建字段的时候一定要设置不能为空。当字段为空字符的时候,不为null的时候,sex<>'1'那些空字符串数据都能查出来。
只有这一条。字段为null的也不等于1,但是查询null条件要这么写:SELECT * from user where sex
结论:varchar类型字段一定要设置不能为null。
如果有这样的需求。两个字段中有一个可能为null,但是两个字段联合创建唯一索引,其中一个字段为null,唯一索引是不起作用的。如果设置了不能为空,字段中有空字符,唯一索引是会生效的。所以null类型在特殊情况是可以用的,没有特殊情况一般设置not
null.
根据自己遇到的问题总结,感觉有什么不对。大神们随时指导