精华内容
参与话题
问答
  • 数据库空值和null的区别

    万次阅读 2015-09-01 10:38:55
    在数据库里是严格区分的,任何数跟NULL进行运算都是NULL, 判断值是否等于NULL,不能简单用=,而要用IS关键字, Mysql3.23.0或以后支持用 <=> 用来比较两个NULL值是否相等, 即 select * from table where id

    所谓的NULL就是什么都没有,连\0都没有,\0在字符串中是结束符,但是在物理内存是占空间的,等于一个字节,而NULL就是连这一个字节都没有。在数据库里是严格区分的,任何数跟NULL进行运算都是NULL, 判断值是否等于NULL,不能简单用=,而要用IS关键字, Mysql3.23.0或以后支持用 <=> 用来比较两个NULL值是否相等, 即 select * from table where id <=> NULL。
    空 (NULL) 值表示数值未知(在实际意义中,如果使用null,就是代表变量值是未知的,比如手机号码设为null,说明不知道手机号码是什么)。空值不同于空白或零值。没有两个相等的空值。比较两个空值或将空值与任何其它数值相比均返回未知,这是因为每个空值均为未知。
    在写入数据的时候,空字符串” 也是一个确定的值,所以就算你定义了 NOT NULL 也可以被写入。
    更详细的解释如下:
    null和空值的区别–转载自这里

    展开全文
  • NULL值详解

    2019-10-29 12:19:18
    NULL值 参考:https://dev.mysql.com/doc/refman/8.0/en/working-with-null.html https://dev.mysql.com/doc/refman/8.0/en/problems-with-null.html https://dev.mysql.com/doc/refman/8.0/en/null-values.html ...

    NULL值

    参考:https://dev.mysql.com/doc/refman/8.0/en/working-with-null.html
    https://dev.mysql.com/doc/refman/8.0/en/problems-with-null.html
    https://dev.mysql.com/doc/refman/8.0/en/null-values.html

    • 概念
      MySQL的NULL值代表“没有数据”或者“缺少的未知值”,0’ ’ 都不是NULL,只有两个NULL值才是相等的,例子如下:
    MariaDB [(none)]> SELECT 0 IS NULL, 0 IS NOT NULL, '' IS NULL, '' IS NOT NULL,NULL IS NULL;
    +-----------+---------------+------------+----------------+--------------+
    | 0 IS NULL | 0 IS NOT NULL | '' IS NULL | '' IS NOT NULL | NULL IS NULL |
    +-----------+---------------+------------+----------------+--------------+
    |         0 |             1 |          0 |              1 |            1 |
    +-----------+---------------+------------+----------------+--------------+
    1 row in set (0.00 sec)
    
    • 运算
      NULL一般用IS NULL和IS NOT NULL运算符,例子如下:
    MariaDB [(none)]> SELECT 1 IS NULL, 1 IS NOT NULL;
    +-----------+---------------+
    | 1 IS NULL | 1 IS NOT NULL |
    +-----------+---------------+
    |         0 |             1 |
    +-----------+---------------+
    1 row in set (0.00 sec)
    
    

    NULL值与其他运算符比较后结果仍然为NULL,例如 <>=<>+ 这些,所以NULL不与其他运算符一起比较,没意义,例子如下:

    MariaDB [example]> SELECT 1 = NULL, 1 <> NULL, 1 < NULL, 1 > NULL,1+NULL;
    +----------+-----------+----------+----------+--------+
    | 1 = NULL | 1 <> NULL | 1 < NULL | 1 > NULL | 1+NULL |
    +----------+-----------+----------+----------+--------+
    |     NULL |      NULL |     NULL |     NULL |   NULL |
    +----------+-----------+----------+----------+--------+
    1 row in set (0.00 sec)
    

    tip:在MySQL里面,0和NULL都是代表false,其他值都是代表true,布尔运算的真值是1

    • group by、order by、distinct
      使用 group byorder bydistinct 所有NULL值都视为相等
      例子如下:
    MariaDB [example]> select * from person;
    +------+-----------+---------+--------+
    | id   | name      | city    | income |
    +------+-----------+---------+--------+
    |    1 | Xiaoming  | NULL    |   4500 |
    |    2 | Xiaohong  | NULL    |   5000 |
    |    3 | Xiaochen  | Nanjing |   5500 |
    |    4 | Xiaozhang | Nanjing |   NULL |
    |    5 | Xiaotian  | Beijing |   NULL |
    +------+-----------+---------+--------+
    5 rows in set (0.00 sec)
    
    MariaDB [example]> select * from person group by city;
    +------+----------+---------+--------+
    | id   | name     | city    | income |
    +------+----------+---------+--------+
    |    1 | Xiaoming | NULL    |   4500 |
    |    5 | Xiaotian | Beijing |   NULL |
    |    3 | Xiaochen | Nanjing |   5500 |
    +------+----------+---------+--------+
    3 rows in set (0.00 sec)
    
    MariaDB [example]> select * from person order by income;
    +------+-----------+---------+--------+
    | id   | name      | city    | income |
    +------+-----------+---------+--------+
    |    4 | Xiaozhang | Nanjing |   NULL |
    |    5 | Xiaotian  | Beijing |   NULL |
    |    1 | Xiaoming  | NULL    |   4500 |
    |    2 | Xiaohong  | NULL    |   5000 |
    |    3 | Xiaochen  | Nanjing |   5500 |
    +------+-----------+---------+--------+
    5 rows in set (0.00 sec)
    
    MariaDB [example]> select distinct(city) from person;
    +---------+
    | city    |
    +---------+
    | NULL    |
    | Nanjing |
    | Beijing |
    +---------+
    3 rows in set (0.00 sec)
    
    • order by … desc/asc
      使用order by … desc会把NULL全部放在后面
      使用order by … asc会把NULL全部放在前面,例子如下:
    MariaDB [example]> select * from person;
    +------+-----------+---------+--------+
    | id   | name      | city    | income |
    +------+-----------+---------+--------+
    |    1 | Xiaoming  | NULL    |   4500 |
    |    2 | Xiaohong  | NULL    |   5000 |
    |    3 | Xiaochen  | Nanjing |   5500 |
    |    4 | Xiaozhang | Nanjing |   NULL |
    |    5 | Xiaotian  | Beijing |   NULL |
    +------+-----------+---------+--------+
    5 rows in set (0.00 sec)
    
    MariaDB [example]> select * from person order by income asc;
    +------+-----------+---------+--------+
    | id   | name      | city    | income |
    +------+-----------+---------+--------+
    |    4 | Xiaozhang | Nanjing |   NULL |
    |    5 | Xiaotian  | Beijing |   NULL |
    |    1 | Xiaoming  | NULL    |   4500 |
    |    2 | Xiaohong  | NULL    |   5000 |
    |    3 | Xiaochen  | Nanjing |   5500 |
    +------+-----------+---------+--------+
    5 rows in set (0.00 sec)
    
    MariaDB [example]> select * from person order by income desc;
    +------+-----------+---------+--------+
    | id   | name      | city    | income |
    +------+-----------+---------+--------+
    |    3 | Xiaochen  | Nanjing |   5500 |
    |    2 | Xiaohong  | NULL    |   5000 |
    |    1 | Xiaoming  | NULL    |   4500 |
    |    4 | Xiaozhang | Nanjing |   NULL |
    |    5 | Xiaotian  | Beijing |   NULL |
    +------+-----------+---------+--------+
    5 rows in set (0.00 sec)
    
    
    • 合计函数
      使用合计函数,例如count()min()max()sum() 这些,NULL不会被统计进去,例子如下:
    MariaDB [example]> select * from person;
    +------+-----------+---------+--------+
    | id   | name      | city    | income |
    +------+-----------+---------+--------+
    |    1 | Xiaoming  | NULL    |   4500 |
    |    2 | Xiaohong  | NULL    |   5000 |
    |    3 | Xiaochen  | Nanjing |   5500 |
    |    4 | Xiaozhang | Nanjing |   NULL |
    |    5 | Xiaotian  | Beijing |   NULL |
    +------+-----------+---------+--------+
    5 rows in set (0.00 sec)
    
    MariaDB [example]> select count(city) from person;
    +-------------+
    | count(city) |
    +-------------+
    |           3 |
    +-------------+
    1 row in set (0.00 sec)
    
    MariaDB [example]> select sum(income) from person;
    +-------------+
    | sum(income) |
    +-------------+
    |       15000 |
    +-------------+
    1 row in set (0.00 sec)
    
    MariaDB [example]> select min(income) from person;
    +-------------+
    | min(income) |
    +-------------+
    |        4500 |
    +-------------+
    1 row in set (0.00 sec)
    
    MariaDB [example]> select max(income) from person;
    +-------------+
    | max(income) |
    +-------------+
    |        5500 |
    +-------------+
    1 row in set (0.00 sec)
    
    
    • 插入处理
      当一个字段数据类型为timestamp时,插入NULL值,字段会插入当前时间而不是NULL
      当一个字段数据类型为整型或者浮点型且为自增时,插入NULL,字段会插入下一个自增值而不是NULL,例子如下:
    MariaDB [example]> insert into person(name,city,income,date) values ('Tim','Beijing',6000,NULL);
    Query OK, 1 row affected (0.06 sec)
    
    MariaDB [example]> select * from person;
    +----+--------+---------+--------+---------------------+
    | id | name   | city    | income | date                |
    +----+--------+---------+--------+---------------------+
    |  1 | Alex   | NULL    |   NULL | 2019-10-29 12:04:32 |
    |  2 | Bob    | NULL    |   NULL | 2019-10-29 12:04:32 |
    |  3 | Jessie | Nanjing |   3500 | 2019-10-29 12:04:32 |
    |  4 | Jefrry | Nanjing |   4000 | 2019-10-29 12:04:32 |
    |  5 | Tom    | Beijing |   6000 | 2019-10-29 12:04:32 |
    |  6 | Joe    | Beijing |   7000 | 2019-10-29 12:06:43 |
    |  7 | Tim    | Beijing |   6000 | 2019-10-29 12:07:34 |
    +----+--------+---------+--------+---------------------+
    7 rows in set (0.01 sec)
    MariaDB [example]> insert into person(id,name,city,income) values (NULL,'Tim','Beijing',6000);
    Query OK, 1 row affected (0.07 sec)
    
    MariaDB [example]> select * from person;
    +----+--------+---------+--------+---------------------+
    | id | name   | city    | income | date                |
    +----+--------+---------+--------+---------------------+
    |  1 | Alex   | NULL    |   NULL | 2019-10-29 12:04:32 |
    |  2 | Bob    | NULL    |   NULL | 2019-10-29 12:04:32 |
    |  3 | Jessie | Nanjing |   3500 | 2019-10-29 12:04:32 |
    |  4 | Jefrry | Nanjing |   4000 | 2019-10-29 12:04:32 |
    |  5 | Tom    | Beijing |   6000 | 2019-10-29 12:04:32 |
    |  6 | Joe    | Beijing |   7000 | 2019-10-29 12:06:43 |
    |  7 | Tim    | Beijing |   6000 | 2019-10-29 12:07:34 |
    |  8 | Tim    | Beijing |   6000 | 2019-10-29 12:08:43 |
    +----+--------+---------+--------+---------------------+
    8 rows in set (0.00 sec)
    
    
    展开全文
  • 一直对空值和null值的概念理解不清晰,所以结合资料以及自己的理解对他们的区别和处理方式进行总结。首先就是在概念上的不同:1、空值不占空间2、null值占空间。打个比喻就是空值表示一个杯子是真空状态,什么都没有...

    一直对空值和null值的概念理解不清晰,所以结合资料以及自己的理解对他们的区别和处理方式进行总结。

    首先就是在概念上的不同:

    1、空值不占空间

    2、null值占空间。

    打个比喻就是空值表示一个杯子是真空状态,什么都没有,而null值是杯子中有空气。接下就建立一个测试表比较它们之间的区别:



    向test表中插入一行数据如下


    发现报错,colA的值不能是null值。

    再插入一条数据,


    这个时候发现向colB一列插入null成功。

    再插入二列数据


    发现向colA一列插入空值成功,而colB列既可以插入空值,也可以插入NULL值。总结一下 ,定义为NOT NULL的字段只能插入空值,不能插入null值,而NULL字段可以插入空值,也可以插入null值。

    接下来再插入一组不含空值和null的数据,


    现在表一共有三列,现在我分别用 is not null 和 <> 检索表中的数据


     





    可以发现 is not null 只会过滤为null值的列,而<>会同时过滤空值和null值,所以要根据实际情况选择过滤方式。另外,判断null值只能用 is null 或 is not null ,不能用 = 或 <>。


    注意事项: 

    1:在进行count()统计某列的记录数的时候,如果采用的NULL值,会别系统自动忽略掉,但是空值是会进行统计到其中的。 


    2: 判断NULL 用IS NULL 或者 is not null,SQL 语句函数中可以使用ifnull()函数来进行处理,判断空字符用 =”或者 <>”来进行处理 
    3: 对于MySQL特殊的注意事项,对于timestamp数据类型,如果往这个数据类型插入的列插入NULL值,则出现的值是当前系统时间。插入空值,则会出现 ‘0000-00-00 00:00:00’ 

    4:对于空值的判断到底是使用is null 还是 =”要根据实际业务来进行区分。

    5、当使用ORDER BY时,首先呈现NULL值。如果你用DESC以降序排序,NULL值最后显示。当使用GROUP BY时,所有的NULL值被认为是相等的,故只显示一行。









    展开全文
  • Null值的使用

    2016-11-02 16:22:00
  • 详解MySQL的NULL值

    2019-07-25 16:18:33
    本文将从多个角度来阐述NULL值的特殊性。 2.前期准备 为了便于演示,先创建一个用来操作的数据表,表结构如下 CREATE TABLE `mytest_null_tbl` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `nam...
  • 我们都知道,null值不能用在等值运算,也不能用来比较大小。道理都懂,但是在实际SQL中,你真的注意到了吗? 例如,我有如下一个tab表,共有5条数据,其中name='sam’有2条数据: mysql> desc tab; +-------+-...
  • 空值和NULL

    2019-07-10 14:13:55
    空值是'',就是什么字符都没有,空值可以和空值相等,也就是可以比较 null是指什么都没有,与空值类型...null,要判断null值只能用is 转载于:https://www.cnblogs.com/lfq2011/archive/2009/03/15/1412553.html...
  • Spring Cacheable注解不缓存null值

    万次阅读 2017-03-20 13:44:13
    下次另一个系统如果更新了,这边从缓存取,还是空值,会有问题。所以一方面,希望另一个系统更新时,能清缓存,另一方面不希望缓存中有太多垃圾数据。 参考...
  • fastjson的tostring输出null值问题

    千次阅读 2019-04-28 18:49:57
    大家在日常测试的时候,经常需要输出一个dto的具体key-value,如下图,当我们直接输出user对象时,发现输出的是只是对象的引用并没有输出我们想要的key-value。 这里大家可能都知道使用fastjson转换成string输出...
  • MySQL NULL 处理

    万次阅读 2019-04-20 22:57:02
    我们已经知道 MySQL 使用 SQL SELECT 命令及 WHERE 子句来读取数据表中的数据,但是当提供的查询条件字段为 NULL 时,该命令可能就无法正常工作。 为了处理这种情况,MySQL提供了三大运算符: IS NULL:当列的是 ...
  • null值与其他值进行比较/null值匹配

    千次阅读 2019-07-01 11:41:15
    在链接查询时,有些null值无法进行关联匹配,但是我们想将这些数据进行链接匹配 可以使用nvl(列名,'别名')来进行转换匹配,nvl的作用是当列名为Null时会自动转换为你所设定的一个别名来进行处理,这样就可以将null值...
  • NULL 与索引(一)

    万次阅读 2012-04-08 13:22:16
    由于NULL存在着无数的可能,因此NULL值也不等于NULL值,所以与NULL值相关的操作同样都为NULL值。正是基于这样一个特性,对于NULL值列上的B树索引导致了is null/is not null不走索引的情形,下面描述了NULL值与索引...
  • ”他又说(可能是从网上摘抄下来的):“不能用null作索引,任何包含null值的列都将不会被包含在索引中。即使索引有多列这样的情况下,只要这些列中有一列含有null,该列就会从索引中排除。也就是说如果某列存在空值...
  • NULL 与索引(二)

    千次阅读 2012-04-08 19:04:25
    NULL值与索引(一)中讲述了null值与索引的一些基本情况。其主要的内容为,基于允许存在null值的索引列,其索引值不会被存储;其次是由于这个特性导致了我们在使用is null时索引失效的情形;最后则是描述的通过为...
  • JSON.toJSONString时保留null值

    万次阅读 2018-08-23 17:59:11
    亲测:字符串提前保留为空串,数字为0 ...从输出结果可以看出,null对应的key已经被过滤掉;这明显不是我们想要的结果,这时我们就需要用到fastjson的SerializerFeature序列化属性 也就是这个方法:JSONObject.to...
  • null不可以toString

    千次阅读 2017-11-23 11:55:47
    问题很简单: 出现nullPointException 改成:   StringBuffer sqlBuffer = new ...sqlBuffer.append("select participation_times from EXAM_SUBJECT where exams_id='" + examsId + ...Integ
  • null值转化为其他值

    千次阅读 2009-09-23 15:29:00
     我个人认为数据库中不应该有null值,因为他颠覆了二值逻辑结构(即:真和假),出现了三值逻辑结构(即:真、假和未知)。由于null,我们的SQL语句很有可能出现意想不到的结果。此外null值和其他值进行数值运算的...
  • SQL Server中的Null值解析

    千次阅读 2009-10-30 15:50:00
    NULL是数据库中特有的数据类型,当一条记录的某个列为NULL,则表示这个列的是未知的、是不确定的。既然是未知的,就有无数种的可能性。因此,NULL并不是一个确定的。这是NULL的由来、也是NULL的基础,所有和NULL...
  • 在做json解析时发现,fastjson处理null时,结果会把null的字段以及值给过滤,业务上需要保留null值。直接上代码 import java.util.HashMap; import java.util.Map; import com.alibaba.fastjson.JSON; import ...
  • mybatisPlus null 更新问题

    千次阅读 2019-03-04 13:26:28
    发现mybatisPlus会更新对象属性为null, 与field-strategy配置有关 mybatis-plus: global-config: db-config: field-strategy: not_null 在3.1.0版本中,其选择的有 public enum FieldStrategy { ...

空空如也

1 2 3 4 5 ... 20
收藏数 2,618,108
精华内容 1,047,243
关键字:

null值