我的编程空间,编程开发者的网络收藏夹
学习永远不晚

MySQL中设置NULL和空白字符串的问题及解决

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

MySQL中设置NULL和空白字符串的问题及解决

MySQL设置NULL和空白字符串问题

今天在修改一个bug,发现了很多问题。

记录其中一个比较有意识的bug。

数据库使用的是MySQL

先不谈问题,我就是觉得同一个字段,有人存了设置为空白字符串,有人设置了NULL。

MySQL中设置NULL和空白字符串的问题及解决

空值是不占用空间的,MySQL中的NULL其实是占用空间的。

还有啊,有时候你虽然插入了NULL,但在数据库中还是有值的,例如时间字段timestamp,虽然你插入了NULL,但会自动获取当前时间进行存储。

在MySQL中判断是否为NULL

为了处理这种情况,MySQL提供了三大运算符:

  • IS NULL: 当列的值是 NULL,此运算符返回 true。
  • IS NOT NULL: 当列的值不为 NULL, 运算符返回 true。
  • <=>: 比较操作符(不同于 = 运算符),当比较的的两个值相等或者都为 NULL 时返回 true。

关于 NULL 的条件比较运算是比较特殊的。你不能使用 = NULL 或 != NULL 在列中查找 NULL 值 。

在 MySQL 中,NULL 值与任何其它值的比较(即使是 NULL)永远返回 NULL,即 NULL = NULL 返回 NULL 。

MySQL 中处理 NULL 使用 IS NULL 和 IS NOT NULL 运算符。

从数据库获取一个集合,里面存着如下内容

MySQL中设置NULL和空白字符串的问题及解决

之前写代码的人是这样操作的

					if(alarmDetailList!=null && alarmDetailList.size()>0){
						for(int i=0;i<alarmDetailList.size();i++){
							Object[] obj = alarmDetailList.get(i);
							String deviceType = obj[5].toString();//设备类型
							List newlist = new ArrayList();
							Alarm alarm = new Alarm();
							alarm.setDevicename(obj[0].toString());
							alarm.setStarttime(obj[1].toString());
							alarm.setEndtime(obj[2].toString());
							alarm.setAlarmcontent(obj[4].toString());
							alarm.setAlarmType(obj[5].toString());
							result.add(alarm);
						}

debug一下,很明显出了问题,在遍历时,当值为NULL时,使用toString()方法是会报空指针异常的。

加一个判断,即可(多写一个无关的条件,只判断==null即可,不要管我)

					if(alarmDetailList!=null && alarmDetailList.size()>0){
						for(int i=0;i<alarmDetailList.size();i++){
							Object[] obj = alarmDetailList.get(i);
							String deviceType = obj[5].toString();//设备类型
							List newlist = new ArrayList();
							Alarm alarm = new Alarm();
							alarm.setDevicename(obj[0].toString());
							alarm.setStarttime(obj[1].toString());
							alarm.setEndtime(obj[2].toString());
							alarm.setAlarmcontent((obj[4]==null||obj[4].equals(""))?"":obj[4].toString());
							alarm.setAlarmType(obj[5].toString());
							result.add(alarm);
						}
					}

前人挖坑,后人接着挖,总有人会跳进去。。

MySQL中空值(null)和空字符(‘‘)

空值(null)和空字符(‘’)是两个比较容易混淆的概念。

本文对两者的区别做简单梳理。

长度和判空

 长度判断空
空值null长度为null,占空间,但具体占用多大空间不确定。判断null用is null或is not null
空字符串’’长度为0,不占用空间。判断空字符用=‘‘或者!=’’

ifnull

对于空值null,可以使用ifnull()函数进行处理。

例如,

select ifnull(comment, '') from orange where id=100;

如果comment字段为null,就返回空字符串。

字段定义为not null,查询的时候也可能返回null

另外,对于字段定义为not null,查询的时候也可能返回null。

例如,

当记录不存在时,查询结果为空:

> select  cluster_name  from orange   where hostname='123';
Empty set (0.00 sec)

对于查询结果为空,如果使用max()函数,返回值不再是空,字符值为null。

>select    max(cluster_name)   from orange   where name='123';
+-------------------+
| max(cluster_name) |
+-------------------+
| NULL       |
+-------------------+
1 row in set (0.00 sec)

建议

尽量不要用null作为默认值。null作为默认值的字段,如果作为索引,会影响效率。

如果确认该字段不会用作索引,也不怕影响效率,可以直接忽略上面一条。 

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。 

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

MySQL中设置NULL和空白字符串的问题及解决

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Oracle中null值和空字符串的坑及解决

目录思考在mysql数据库中在oracle数据库中总结思考在学习oracle数据库的过程中,发现当对字段进行约束,默认空字符串时,出现报错--创建employees表CREATE TABLE employees (id NUMBER,n
Oracle中null值和空字符串的坑及解决
2024-08-26

mybatis if test不为空字符串且不为null的问题怎么解决

这篇文章主要介绍“mybatis if test不为空字符串且不为null的问题怎么解决”,在日常操作中,相信很多人在mybatis if test不为空字符串且不为null的问题怎么解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的
2023-06-29

MySQL解决Navicat设置默认字符串时的报错问题

目录简介问题复现原因分析解决方案简介说明本文介绍用Navicat添加字段(字符串类型)并设置默认值时的报错问题。问题描述在java开发过程中,经常会遇到给已有的表添加字段的场景。在插入新字段的时候,表里边可能已经有很多数据了,这时
2022-06-16

C#中常见的字符串操作问题及解决方法

C#中常见的字符串操作问题及解决方法字符串拼接问题在C#中,我们经常需要将多个字符串拼接在一起,但是如果使用简单的加号"+"运算符,则会出现性能问题。这是因为在每次拼接字符串时,都会创建一个新的字符串对象,导致内存的频繁分配和回收。解决方法
2023-10-22

C++中常见的字符串处理问题及解决方案

C++中常见的字符串处理问题及解决方案引言字符串处理是在C++编程中经常遇到的问题之一。无论是从用户的输入,还是从文件中读取数据,或者是进行数据的处理和转换,字符串处理始终占据着重要的位置。本文将介绍在C++中常见的字符串处理问题,并给出相
2023-10-22

Mysql逗号拼接字符串的关联查询及统计问题怎么解决

这篇“Mysql逗号拼接字符串的关联查询及统计问题怎么解决”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Mysql逗号拼接字
2023-03-09

PHP开发中遇到的16进制转字符串中文乱码问题及解决方案

PHP开发中遇到的16进制转字符串中文乱码问题及解决方案在PHP开发中,有时候我们会遇到需要将16进制形式的数据转换为字符串的需求,但在这个过程中可能会出现中文乱码的问题。本文将介绍具体的问题分析和解决方案,并附上代码示例,希望能帮助到有
PHP开发中遇到的16进制转字符串中文乱码问题及解决方案
2024-03-05

编程热搜

目录