在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
相信很多用了MySQL很久的人,对这两个字段属性的概念还不是很清楚,一般会有以下疑问:
带着上面几个疑问,我们来深入研究一下null 和 not null 到底有什么不一样。
打个比方来说,你有一个杯子,空值代表杯子是真空的,NULL代表杯子中装满了空气,虽然杯子看起来都是空的,但是区别是很大的。 搞清楚“空值”和“NULL”的概念之后,问题基本就明了了,我们搞个例子测试一下: 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 ; 插入数据: INSERT INTO `test` VALUES (null,1); mysql发生错误:
再来一条 INSERT INTO `test` VALUES ('',1); 成功插入。 可见,NOT NULL 的字段是不能插入“NULL”的,只能插入“空值”,上面的问题1也就有答案了。 对于问题2,上面我们已经说过了,NULL 其实并不是空值,而是要占用空间,所以mysql在进行比较的时候,NULL 会参与字段比较,所以对效率有一部分影响。 我们再向test的表中插入几条数据: INSERT INTO `test` VALUES ('', NULL); INSERT INTO `test` VALUES ('1', '2'); 现在表中数据: 现在根据需求,我要统计test表中col1不为空的所有数据,我是该用“<> ''” 还是 “IS NOT NULL” 呢,让我们来看一下结果的区别。 SELECT * FROM `test` WHERE col1 IS NOT NULL SELECT * FROM `test` WHERE col1 <> '' 可以看到,结果迥然不同,所以我们一定要根据业务需求,搞清楚到底是要用那种搜索条件。 MYSQL建议列属性尽量为NOT NULL 长度验证:注意空值的''之间是没有空格的。 mysql> select length(''),length(null),length(' '); +------------+--------------+--------------+ | length('') | length(null) | length(' ') | +------------+--------------+--------------+ | 0 | NULL | 2 | +------------+--------------+--------------+ 注意事项:
到此这篇关于MySQL null与not null和null与空值''''的区别详解的文章就介绍到这了,更多相关MySQL null与not null 内容请搜索极客世界以前的文章或继续浏览下面的相关文章希望大家以后多多支持极客世界! |
请发表评论