zoukankan      html  css  js  c++  java
  • 占用空间区别

    mysql> select length(NULL), length(''), length('1');
    +--------------+------------+-------------+
    | length(NULL) | length('') | length('1') |
    +--------------+------------+-------------+
    | NULL | 0 | 1 |
    +--------------+------------+-------------+
    1 row in set
    1
    2
    3
    4
    5
    6
    7
    小总结:从上面看出空值(’’)的长度是0,是不占用空间的;而的NULL长度是NULL,其实它是占用空间的,看下面说明。

    NULL columns require additional space in the row to record whether their values are NULL.

    NULL列需要行中的额外空间来记录它们的值是否为NULL。

    通俗的讲:空值就像是一个真空转态杯子,什么都没有,而NULL值就是一个装满空气的杯子,虽然看起来都是一样的,但是有着本质的区别。

    2、插入/查询方式区别

    创建一个表,tb_test

    CREATE TABLE `tb_test` (
    `one` varchar(10) NOT NULL,
    `two` varchar(255) DEFAULT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    1
    2
    3
    4
    插入进行验证:

    -- 全部插入 NULL,失败
    mysql> INSERT tb_test VALUES (NULL,NULL);
    1048 - Column 'one' cannot be null
    1
    2
    3
    -- 全部插入 空值,成功
    mysql> INSERT tb_test VALUES ('','');
    Query OK, 1 row affected
    1
    2
    3
    模拟数据:

    INSERT tb_test VALUES (1,NULL);
    INSERT tb_test VALUES ('',2);
    INSERT tb_test VALUES (3,3);
    1
    2
    3
    空值字段:

    -- 使用 is null/is not null
    mysql> SELECT * FROM tb_test where one is NULL;
    Empty set

    mysql> SELECT * FROM tb_test where one is not NULL;
    +-----+------+
    | one | two |
    +-----+------+
    | 1 | NULL |
    | | 2 |
    | 3 | 3 |
    +-----+------+
    3 rows in set
    -- 使用 = 、!=
    mysql> SELECT * FROM tb_test where one = '';
    +-----+-----+
    | one | two |
    +-----+-----+
    | | 2 |
    +-----+-----+
    1 row in set

    mysql> SELECT * FROM tb_test where one != '';
    +-----+------+
    | one | two |
    +-----+------+
    | 1 | NULL |
    | 3 | 3 |
    +-----+------+
    2 rows in set

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    NULL值字段:

    -- 使用 is null/is not null
    mysql> SELECT * FROM tb_test where two is not NULL;
    +-----+-----+
    | one | two |
    +-----+-----+
    | | 2 |
    | 3 | 3 |
    +-----+-----+
    2 rows in set

    mysql> SELECT * FROM tb_test where two is NULL;
    +-----+------+
    | one | two |
    +-----+------+
    | 1 | NULL |
    +-----+------+
    1 row in set

    -- 使用 = 、!=
    mysql> SELECT * FROM tb_test where two = '';
    Empty set

    mysql> SELECT * FROM tb_test where two != '';
    +-----+-----+
    | one | two |
    +-----+-----+
    | | 2 |
    | 3 | 3 |
    +-----+-----+
    2 rows in set
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    小总结:如果要单纯查NULL值列,则使用 is NULL去查,单纯去查空值(’’)列,则使用 =''。

    建议查询方式:NULL值查询使用is null/is not null查询,而空值(’’)可以使用=或者!=、<、>等算术运算符。
    ---------------------

  • 相关阅读:
    VisualVM 分析full GC问题记录
    HTTPS协议、TLS协议、证书认证过程解析
    java.lang基础数据类型boolean、char、byte、short、int、long、float、double (JDK1.8)
    java.lang.StringBuilder和java.lang.StringBuffer (JDK1.8)
    MVC中自带的异步((Ajax.BeginForm)无效
    百度富文本编辑器UEDITOR
    只有在配置文件或 Page 指令中将 enableSessionState 设置为 true 时,才能使用会话状态。还请确保在应用程序配置的 // 节中包括 System.Web.SessionSta
    【知识碎片】CSS 篇
    js 将json字符串转换为json对象的方法解析
    【知识碎片】Asp.Net 篇
  • 原文地址:https://www.cnblogs.com/ly570/p/11311249.html
Copyright © 2011-2022 走看看