MySQL列值NULL和空字符串的区别总结

MySQL列值NULL和空字符串的区别总结

空字符串 ‘’ 的用法与一般值一样,没有特殊性,所以不对其进行描述。

官网关于 NULL 值的描述:

The NULL value means “no data.” NULL can be written in any lettercase.

NULL 值意味着“没有数据”,虽然空字符串也是没有数据,但是二者是有着明显的区别的,我们可以用Java语言中的 NULL 来理解,Java 语言中 NULL 表示引用没有任何指向,而空字符串表示引用指向空字符串,所以数据库中的 NULL 可以理解为未指定任何值。NULL 不区分大小写。

关于列值 NULL 和空字符串(’’)的区别从以下几个方面分析:

空间占用

NULL 是占用空间的,而 ‘’ 是不占用空间的。

mysql> SELECT LENGTH(NULL), LENGTH(''), LENGTH(' ');
LENGTH(NULL)LENGTH(’’)LENGTH(’ ')
NULL01

使用方式

特殊操作

In SQL, the NULL value is never true in comparison to any other value, even NULL. An expression that contains NULL always produces a NULL value.

NULL 与任何值都不相等,包括 NULL 本身,NULL 在比较运算符中操作始终返回 NULL,而不是 0-false、1-true。所以判断列值是否为 NULL,需要使用 IS NULLIS NOT NULL

mysql> SELECT NULL IS NULL, NULL IS NOT NULL;--1,0
mysql> SELECT NULL=NULL, NULL!=NULL;--NULL,NULL
mysql> SELECT NULL, 1+NULL, CONCAT('Invisible',NULL);--NULL,NULL,NULL

For sorting with ORDER BY, NULL values sort before other values for ascending sorts, after other values for descending sorts.

使用 ORDER BY排序时,升序时 NULL 在最前面,降序时在最后面,可以理解为 NULL 值在所有列值里是最小的。

When using DISTINCT, GROUP BY, or ORDER BY, all NULL values are regarded as equal.

当使用 DISTINCTGROUP BY,或者 ORDER BY 时,NULL 值可视为彼此相等。

In MySQL, 0 or NULL means false and anything else means true. The default truth value from a boolean operation is 1.

0 或 NULL 表示 false,而其它值都为 true,默认的 true 的值为1。

Aggregate (summary) functions such as COUNT(), MIN(), and SUM() ignore NULL values. The exception to this is COUNT(*), which counts rows and not individual column values.

聚合函数如 COUNT()MIN()SUM()都会忽略 NULL 值,COUNT(*)除外。

mysql>  SELECT COUNT(*),COUNT(username),COUNT(password) FROM user;
COUNT(*)COUNT(username)COUNT(password)
443

For some data types, MySQL handles NULL values specially. If you insert NULL into a TIMESTAMP column, the current date and time is inserted. If you insert NULL into an integer or floating-point column that has the AUTO_INCREMENT attribute, the next number in the sequence is inserted.

对于一些数据类型,MySQL 对于 NULL 值的处理很特殊。当向 TIMESTAMP列中插入 NULL 时,当前时间会被插入;当向数值或浮点列插入 NULL,并且这些列声明为 AUTO_INCREMENT,序列中的下一个数字会被插入。

注意:验证 TIMESTAMP 时,插入 NULL 时数据库仍是 NULL,此时需要设置 explicit_defaults_for_timestamp=false,这样当插入 NULL 时才会默认设置为当前时间。

You can add an index on a column that can have NULL values if you are using the MyISAM, InnoDB, or MEMORY storage engine. Otherwise, you must declare an indexed column NOT NULL, and you cannot insert NULL into the column.

如果使用的是MyISAM,InnoDB或MEMORY存储引擎,则可以在具有NULL值的列上添加索引。 否则,您必须声明一个索引列 NOT NULL,并且您不能在该列中插入 NULL。

mysql> ALTER TABLE student ADD INDEX index_muti(id, password);-- 复合索引
mysql> ALTER TABLE student ADD INDEX index_sing(password); -- 普通索引
mysql> SHOW INDEXES FROM student;--查看索引

索引信息
执行计划

注意:复合索引中,如果第一个顺序的索引列 IS NULL 时或者所有的索引列都为 IS NULL 时,索引失效!

函数 IFNULL

语法:IFNULL(expr1,expr2)

If expr1 is not NULL, IFNULL() returns expr1; otherwise it returns expr2.

 mysql> SELECT IFNULL(NULL, 'is null');
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值