精华内容
下载资源
问答
  • 文章目录Oracle 数据库创建表表插入操作表查询操作NULL 值总结MySQL 数据库创建表表插入...对此查询相关文档对空字符串和 NULL 值的区别进行记录。 Oracle 数据库 创建表 新建一张测试表,用于后续的 Sql 操作校验...


    在上节总结 Oracle语句判断字符串是否为数字及translate函数解析 一章中有对 NULL 值的使用,当时更换为空值进行判断,但是效果不一样。对此查询相关文档对空字符串和 NULL 值的区别进行记录。

    Oracle 数据库

    创建表

    新建一张测试表,用于后续的 Sql 操作校验。

    DROP TABLE "spring"."student";
    CREATE TABLE "spring"."student" (
    "id" NUMBER(5) NOT NULL ,
    "num" VARCHAR2(20 BYTE) NOT NULL ,
    "desc" VARCHAR2(20 BYTE) NULL 
    )
    LOGGING
    NOCOMPRESS
    NOCACHE
    ;
    COMMENT ON COLUMN "spring"."student"."num" IS '序号';
    COMMENT ON COLUMN "spring"."student"."desc" IS '描述';
    
    -- ----------------------------
    -- Indexes structure for table student
    -- ----------------------------
    
    -- ----------------------------
    -- Checks structure for table student
    -- ----------------------------
    ALTER TABLE "spring"."student" ADD CHECK ("id" IS NOT NULL);
    ALTER TABLE "spring"."student" ADD CHECK ("num" IS NOT NULL);
    
    -- ----------------------------
    -- Primary Key structure for table student
    -- ----------------------------
    ALTER TABLE "spring"."student" ADD PRIMARY KEY ("id");
    

    表插入操作

    INSERT INTO "spring"."student" ("id", "num", "desc") VALUES (101, '2019001', 'hresh');--插入成功
    

    当设置 desc 字段值为 NULL 时进行插入。

    INSERT INTO "spring"."student" ("id", "num", "desc") VALUES (102, '2019001', NULL);--插入成功
    

    当设置 desc 字段值为空字符串时进行插入。

    INSERT INTO "spring"."student" ("id", "num", "desc") VALUES (104, '2019001', '');--插入成功
    

    当设置 num 字段值为 NULL 或空字符串时进行插入。

    INSERT INTO "spring"."student" ("id", "num", "desc") VALUES (103, NULL, 'hresh');--失败
    
    INSERT INTO "spring"."student" ("id", "num", "desc") VALUES (105, '', 'hresh');--失败
    

    当设置 num 字段或 desc 字段值为空格时进行插入。

    INSERT INTO "spring"."student" ("id", "num", "desc") VALUES (107, '2019001', ' ');--插入空格成功
    
    INSERT INTO "spring"."student" ("id", "num", "desc") VALUES (108, ' ', 'hresh');--插入空格成功
    

    插入操作结束后,查看表中数据,如图所示:

    由表中数据可以得到以下结论:

    • 对于定义为 char 和 varchar2 类型的字段来说,’’(空字符串)就是 null ;
    • 定义为 not null 的字段(num)既不能插入空字符串也不能插入 null;
    • 定义为 null 的字段(desc)可以插入空字符串和 null,且显示结果均为 null;

    表查询操作

    select * from "student" where "desc" =' '; ----判断空格
    ----
    ---查询得到1条记录,id为107
    
    select * from "student" where "desc" =''; ----判断空字符串
    ----
    ---无记录
    
    select * from "student" where "desc" is NULL; ----判断null
    ----
    ----查询得到2条记录,id为102和104
    

    NULL 值总结

    什么是 NULL 值?

    在我们不知道具体有什么数据的时候,也即未知,可以用 NULL,我们也称它为空 值。在 Oracle 中,NULL 值的字段长度为 null。

    select "LENGTH"(null) from dual;
    ----
    结果为null
    

    NULL 值的存在范围?

    Oracle 允许任何一种数据类型的字段为空,除了以下两种情况:

    1. 主键字段(primary key),
    2. 定义时已经加了NOT NULL限制条件的字段

    对空值做加、减、乘、除等运算操作,结果仍为空

    SELECT null + 1 from dual;
    SELECT null - 1 from dual;
    SELECT null * 1 from dual;
    SELECT null / 1 from dual;
    ----
    结果均为null
    

    NULL 值的处理使用 NVL 函数

    SELECT "NVL"(NULL, '521') from dual;
    ---
    521
    

    NULL 值比较使用关键字用"is null"和"is not null"

    SELECT 1 FROM dual where NULL IS NULL;---结果为1
    SELECT 1 FROM dual where NULL = NULL;--结果为null
    SELECT 1 FROM dual where '' = '';--结果为null
    SELECT 1 FROM dual where "NVL"(NULL, 1)="NVL"(NULL, 1);---结果为1
    

    空值不能被索引,所以查询时有些符合条件的数据可能查不出来,count(列名)中,用nvl(列名,0)处理后再查

    select "COUNT"("desc") from "student";--3
    select "COUNT"(1) from "student";--5
    select "COUNT"("NVL"("desc", 1)) from "student";--5
    

    排序时比其他数据都大(索引默认是降序排列,小→大),所以NULL值总是排在最后

    select * from "student" ORDER BY "desc";
    

    MySQL 数据库

    创建表

    CREATE TABLE `student` (
      `id` int(5) NOT NULL AUTO_INCREMENT,
      `num` varchar(5) NOT NULL,
      `desc` varchar(20) DEFAULT NULL COMMENT '描述',
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;
    

    表插入操作

    INSERT INTO `spring`.`student` (`NUM`, `DESC`) VALUES ('100', 'hresh');--插入成功
    

    当设置 desc 字段值为 NULL 时进行插入。

    INSERT INTO `spring`.`student` (`NUM`, `DESC`) VALUES ('101', NULL);--插入成功
    

    当设置 desc 字段值为空字符串时进行插入。

    INSERT INTO `spring`.`student` (`NUM`, `DESC`) VALUES ('102', '');--插入成功
    

    当设置 num 字段值为 NULL 或空字符串时进行插入。

    INSERT INTO `spring`.`student` (`NUM`, `DESC`) VALUES (NULL, 'hresh');--失败
    
    INSERT INTO `spring`.`student` (`NUM`, `DESC`) VALUES ('', 'hresh');--成功
    

    当设置 num 字段或 desc 字段值为空格时进行插入。

    INSERT INTO `spring`.`student` (`NUM`, `DESC`) VALUES (' ', ' ');--插入空格成功
    

    插入操作结束后,查看表中数据,如图所示:

    由表中数据可以得到以下结论:

    • 空字符串和 NULL 值不是一回事;
    • 定义为 not null 的字段(num)只能插入空字符串,不能插入 null 值;
    • 定义为 null 的字段(desc)可以插入空字符串和 null,对应显示空字符串和 null。

    表查询操作

    SELECT * FROM spring.student WHERE `desc` IS NULL;
    ---查询得到1条记录,id为3
    SELECT * FROM spring.student WHERE `desc` = '';
    ---查询得到2条记录,id为4和8
    SELECT * FROM spring.student WHERE `desc` IS NOT NULL;
    ----查询得到4条记录,id为4,5,7,8
    SELECT * FROM spring.student WHERE `desc` != '';
    ---查询得到2条记录,id为5,7
    

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

    SELECT count(`desc`) FROM spring.student;--4
    

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

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

    展开全文
  • Java 空字符串和null的区别【实践】

    千次阅读 2019-10-10 17:35:50
    1、空字符串 ""是一个空字符串,长度为0且占内存的,可以使用Object对象中的方法。如"".toString()。 new String() 创建一个字符串对象,默认值为""。 检查一个字符串是否为空: if (str.length() == 0) //或...

    1、空字符串

    ""是一个空字符串,长度为0且占内存的可以使用Object对象中的方法。如"".toString()。

    new String() 创建一个字符串对象,默认值为""。

    检查一个字符串是否为空:

    if (str.length() == 0)
    //或
    if (str.equals(""))

    2、null

    null是空引用,表示一个对象的值,没有分配内存。字符串为null,调用方法是会被空指针异常。

    String类型的变量,默认值为null。

    要检查一个字符串是否为 null:

    if (str == null)

    检查一个字符串既不是 null 也不为空串:

    if (str != null && str.length() != 0)

    注意:首先要检查 str 不为 null。

    public static void main(String[] args) {
        String str1 = new String();
        String str2 = null;
        String str3 = "";
        System.out.println(str3.length()); // 空字符串""的长度为0
        System.out.println(str2.length()); // 抛出空指针异常
        System.out.println(str1); // 输出""
        System.out.println(str1 == str2); // 内存地址的比较,返回false
        System.out.println(str1.equals(str2)); // 值的比较,返回false
        System.out.println(str2 == str3); // 内存地址的比较,返回false
        System.out.println(str3.equals(str2)); // 值的比较,返回false
        System.out.println(str1 == str3); // 内存地址的比较,返回false
        System.out.println(str1.equals(str3)); // 值的比较,返回true
    }

     

    展开全文
  • 主要介绍了详解MyBatis-Plus updateById方法更新不了空字符串/null解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 【kettle】空字符串和NULL的问题

    千次阅读 2020-03-11 10:10:42
    在使用kettle迁移数据时,对表输入的字段为null的已经做了空字符串处理后,在表输出时,发现kettle将空字符串转为了null处理,百度发现,说是kettle默认情况下把空字符串当作NULL处理。 如果要是不让他转换,处理...

    在使用kettle迁移数据时,对表输入的字段为null的已经做了空字符串处理后,在表输出时,发现kettle将空字符串转为了null处理,百度发现,说是kettle默认情况下把空字符串当作NULL处理。

    如果要是不让他转换,处理方式:

    在C:\Users\用户名\.kettle目录中找到kettle.properties文件,增加:

    KETTLE_EMPTY_STRING_DIFFERS_FROM_NULL=Y

    重启Kettle

    展开全文
  • 区分空字符串和NULL 数据库存储数据有必要搞清空值,空字符串和 NULL 的概念。 空字符串是单引号引的,它其实是不占空间的。 MySQL 中 null 其实是占空间的,官网文档里有说明。 它们之前的长度验证: select ...

    在这里插入图片描述

    文章中所有操作均是在 MySQL 5.7 版本下进行的

    区分空字符串和NULL

    数据库存储数据有必要搞清空值,空字符串和 NULL 的概念。

    • 空字符串是单引号引的,它其实是不占空间的。
    • MySQL 中 null 其实是占空间的,官网文档里有说明。

    它们之前的长度验证:

    select length('') as '空串', length(null) as 'null', length(' ') as '空格字符串';
    +--------+------+-----------------+
    | 空串   | null | 空格字符串        |
    +--------+------+-----------------+
    |      0 | NULL |               1 |
    +--------+------+-----------------+
    

    如何查询空字符串和NULL

    -- 创建测试表
    drop table if exists tbl_test;
    create table tbl_test(
    	id	  int primary key,
    	info  varchar(50)
    );
    -- 插入测试数据
    insert into tbl_test (id, info) values (1, null);
    insert into tbl_test (id, info) values (2, '');
    insert into tbl_test (id, info) values (3, 'null');
    insert into tbl_test (id, info) values (4, ' ');	-- 带空格的字符串
    

    查询null的数据

    select * from tbl_test where info is null;
    +----+------+
    | id | info |
    +----+------+
    |  1 | NULL |
    +----+------+
    /*
    不是null的就是 is not null
    id=3的数据那是一个null的字符串,不等同与null
    */
    

    查询空串的数据

    select * from tbl_test where info = '';
    +----+------+
    | id | info |
    +----+------+
    |  2 |      |
    |  4 |      |
    +----+------+
    -- 以上把id=4的空串也给查询出来了,其实id=4并不是我想要的,处理如下
    select * from tbl_test where info = binary'';
    +----+------+
    | id | info |
    +----+------+
    |  2 |      |
    +----+------+
    

    能不能给唯一约束的字段插入NULL或者空串

    -- 先清空了数据
    delete from tbl_test;
    -- 修改变增加一个字段并增加唯一约束
    alter table tbl_test add num int;
    alter table tbl_test add unique(num);
    

    加入空串数据

    insert into tbl_test (id, num) values (1, '');
    -- 试过知道,以上语句报错,是因为不能将空串加入到唯一约束的字段中
    

    加入null数据

    insert into tbl_test (id, num) values (2, null);
    insert into tbl_test (id, num) values (3, null);
    -- 以上语句没有问题,所以可以给唯一约束的字段增加null数据,而且可以是多个
    

    结语

    null 其实并不是空值,而是要占用空间,所以 MySQL 在进行比较的时候,null 会参与字段比较,所以对效率有一部分影响。对于表索引时不会存储 null 值的,所以如果索引的字段可以为 null,索引的效率会下降很多。

    空值也不一定为空,对于 timestamp 数据类型,如果往这个数据类型插入的列插入 null 值,则出现的值是当前系统时间。插入空值,则会出现 ‘0000-00-00 00:00:00’。

    展开全文
  • 最近开始研究JavaScript的简写方法,下面就是有关判断为的简写方法
  • 主要介绍了Python判断字符串是否为空和null,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • 在使用MP实现条件查询时,如果入参为null或者""时,则MP还是会把其当做条件去执行: select * from user where name = ? (String) string为“”还是有参数 MP官方文档给出解决方案:...
  • 空字符串:“”和null的区别。

    万次阅读 多人点赞 2018-07-13 11:11:40
    两者区别非常大,虽然都是没有信息,但是null代表堆内存中根本没有这个东西,而空字符串就完全不同了,空字符串也是字符串,他是有内存空间的,你可以这样尝试一下:String aaa = null;String bbb = "";...
  • Oracle 空字符串和NULL

    千次阅读 2014-12-04 22:29:32
    在 Oracle 中,空字符串又叫做 NULL 字符串,它们是等价的。 CREATE TABLE STUDENT ( NAME VARCHAR(10) ); INSERT INTO STUDENT (NAME) VALUES (''); SELECT * FROM STUDENT; 结果如下: NAME (null) --更多...
  • MP依赖版本 com.baomidou mybatis-plus 3.3.1.tmp 问题背景 在使用MP实现条件查询时,如果入参为null或者""时,则MP还是会把其当做条件去执行如图: 入参:... if (entity.getId().equals("")) { entity.setId(null); }
  • 关于kettle的空字符串和NULL的问题

    千次阅读 2015-10-30 09:59:01
    使用kettle5.1对同构的两个mysql数据库进行多表循环复制数据,发现kettle的"表输入"取得的内容,把空字符串''转换为NULL了; 查了资料,说是kettle默认情况下把空字符串当作NULL处理。 解决办法: 在C:...
  • Oracle坑之-空字符串NULL

    千次阅读 2018-02-13 10:45:11
    Oracle坑之-空字符串NULL 空字符串NULL首先有如下代码SELECT * FROM Pdc_DataDomain DD INNER JOIN Pdc_DD_Table DDT ON DD.DataDomainID = DDT.DataDomainID AND DD.ApplicationDBID = '3e7c6764d73f4c...
  • mysql 判断null 空字符串

    千次阅读 2020-02-25 19:04:35
    1.在mysql中null 不能使用任何运算符与其他字段或者变量(函数、存储过程)进行运算。若使用运算数据就可能会有问题。 2.对null 的判断:  创建一个user表:id 主健 name 可以为  select * from user;  ...
  • 下面小编就为大家带来一篇java json不生成null或者空字符串属性(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • 2.判断NULL用IS NULL或者IS NOT NULL,SQL语句函数中可以使用ifnull()函数来进行处理,判断空字符用=''或者<>''来进行处理 3.对于MySQL特殊的注意事项,对于timestamp数据类型,如果往这个数据类型插入...
  • elasticsearch 搜索空字符串NULL

    千次阅读 2019-07-11 21:09:29
    创建测试数据 PUT test/_bulk {"create":{"_index":"test","_type":"type1","_id":"1"}} {"title":"","id":1} {"create":{"_index":"test","_type":"type1","_...{"title":null,"id":2} {"create":{"_index":"tes...
  • postgresql与Oracle:空字符串null

    千次阅读 2017-06-20 16:00:30
    在postgresql中,空字符串null是不同的;而oracle中,空字符串null等同。测试如下: postgresql中: postgres=# insert into testnull values(1,'feikong'); INSERT 0 1 postgres=# insert into testnull ...
  • mybatis-plus 无法更新空字符串或者null

    千次阅读 2020-03-23 15:44:50
    #字段策略 0:"忽略判断",1:"非 NULL 判断"),2:"非空判断" field-strategy: 2 解决方法: 1:把字段策略改为0.并且需要确保你的PO对象修饰字段的时候,还需要加入el属性,每个属性对应数据库的jdbcType类型,这样...
  • java中String空字符串null的比较

    千次阅读 2018-11-28 09:55:32
    String obj = null; 将null赋值给obj则obj为没有具体指向的对象, 比较方法:obj == null,会返回true ...空字符串赋值给obj2 比较方法:obj2=="",返回true, 或者obj2.isEmpty(),返回true 或...
  • ""表示的是一个空字符串,也就是说它的长度为0,但它是一个字符串。 例如声明一个字符串String str = “” ; 2、内存分配 String str = null ; 表示声明一个字符串对象的引用,但指向为null,也就是说还没有指向任何...
  • hive的空字符串null

    千次阅读 2019-05-21 13:42:52
    int与string类型,null底层默认存储为\N,查询显示为null。导出文件会以存储格式导出。若导出为null,存储的字符串就是null。hive不区分大小写。
  • MySQL中设置NULL和空白字符串的问题

    千次阅读 2020-09-23 19:56:20
    先不谈问题,我就是觉得同一个字段,有人存了设置为空白字符串,有人设置了NULL。 空值是不占用空间的,MySQL中的NULL其实是占用空间的。 还有啊,有时候你虽然插入了NULL,但在数据库中还是有值的,例如时间...
  • 对象空字符串null

    千次阅读 2020-01-10 16:34:09
    前台处理:把空字符串的不传递或者默认null; 后台处理:去除对象里面值为空字符串的属性(根据这句话就可以实现了); 不装逼了,下面上代码 实现过程中遇到的问题 开始map循环是用java8的表达式for each转的。...
  • sql判断null和空字符串的字段

    千次阅读 2019-11-04 11:52:14
    转载链接 :https://blog.csdn.net/weixin_43554218/article/details/85047161 判断某个字段不为null : name is not null 判断某个字段不为空字符串: name != ''
  • 空字符串NULL、空格串的区别

    万次阅读 2018-05-12 16:12:43
     //空字符串 str1.length() 等于 0 string str2 = null; //NULL string str3 = " "; //空格串 str2.length() 等于 12、内存区别 "" :分配了内存 ,分配了一个空间 null :未分配.....
  • kotlin字符串Given a string, we have to check whether it is an empty, blank or NULL string. 给定一个字符串,我们必须检查它是否为,空白或NULL字符串。 Example: 例: Input: str = "" ...
  • kettle 空字符串 & null问题解决

    千次阅读 2019-03-05 15:39:09
    今天,在配置kettle同步mysql数据的时候,碰到了kettle把空字符串当成null的情况。 解决步骤: 找到配置文件:C:\Users\用户名.kettle目录中找到kettle.properties 添加配置:KETTLE_EMPTY_STRING_DIFFERS_FROM_...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 617,737
精华内容 247,094
关键字:

空字符串和null