【SQL】表中的空字符串与NULL中的区别何在

作者&投稿:岳青 (若有异议请与网页底部的电邮联系)
sql 数据库 NULL 和 空字符串的区别~

SQL里的NULL是真实的空,在存储上并未分配存储空间
空字符串,在存储上已经分配存储空间,但是是空内容。

两者在SQL中的判断也不一样
NULL的判断: 字段名 is null
空字符串:字段名=''

两者可以合并判断:
if isnull(字段名,'')=''
print '空'
else
print '非空'

SQL里的NULL是真实的空,在存储上并未分配存储空间
空字符串,在存储上已经分配存储空间,但是是空内容。

两者在SQL中的判断也不一样
NULL的判断: 字段名 is null
空字符串:字段名=''

两者可以合并判断:
if isnull(字段名,'')=''
print '空'
else
print '非空'

对于SQL的新手,NULL值的概念常常会造成混淆,常认为NULL是与空字符串''相同的事。情况并非如此。例如,下述语句是完全不同的:    

mysql> INSERT INTO my_table (phone) VALUES (NULL);    
mysql> INSERT INTO my_table (phone) VALUES ('');

 这两条语句均会将值插入phone(电话)列,但第1条语句插入的是NULL值,第2条语句插入的是空字符串。

第1种情况的含义可被解释为“电话号码未知”,而第2种情况的含义可被解释为“该人员没有电话,因此没有电话号码”。  


  为了进行NULL处理,可使用IS NULL和IS NOT NULL操作符以及IFNULL()函数。    在SQL中,NULL值与任何其它值的比较(即使是NULL)永远不会为“真”。

包含NULL的表达式总是会导出NULL值,除非在关于操作符的文档中以及表达式的函数中作了其他规定。

下述示例中的所有列均返回NULL:   

 mysql> SELECT NULL, 1+NULL, CONCAT('Invisible',NULL);

 如果打算搜索列值为NULL的列,不能使用expr = NULL测试。

下述语句不返回任何行,这是因为,对于任何表达式,expr = NULL永远不为“真”:  

 mysql> SELECT * FROM my_table WHERE phone = NULL;

要想查找NULL值,必须使用IS NULL测试。


在下面的语句中,介绍了查找NULL电话号码和空电话号码的方式:    

mysql> SELECT * FROM my_table WHERE phone IS NULL;    
mysql> SELECT * FROM my_table WHERE phone = '';

    如果正在使用MyISAM、InnoDB、BDB、或MEMORY存储引擎,能够在可能具有NULL值的列上增加1条索引。

如不然,必须声明索引列为NOT NULL,而且不能将NULL插入到列中。   


 用LOAD DATA INFILE读取数据时,对于空的或丢失的列,将用''更新它们。

如果希望在列中具有NULL值,应在数据文件中使用\N。在某些情况下,也可以使用文字性单词“NULL”。


    使用DISTINCT、GROUP BY或ORDER BY时,所有NULL值将被视为等同的。    

    使用ORDER BY时,首先将显示NULL值,如果指定了DESC按降序排列,NULL值将最后显示。

    对于聚合(累计)函数,如COUNT()、MIN()和SUM(),将忽略NULL值。对此的例外是COUNT(*),它将计数行而不是单独的列值。

例如,下述语句产生两个计数。首先计数表中的行数,其次计数age列中的非NULL值数目:   

 mysql> SELECT COUNT(*), COUNT(age) FROM person;

   对于某些列类型,MySQL将对NULL值进行特殊处理。如果将NULL插入TIMESTAMP列,将插入当前日期和时间。如果将NULL插入具有AUTO_INCREMENT属性的整数列,将插入序列中的下一个编号



没有什么好坏,
区别就在查询语句上。。。
NULL的查询条件要写成
where col is null
""的查询条件要写成
where col=""
主要是看你的系统的定义中有没有对""和<NULL>有没有特别的定义。。。

''表示空字符串(但它还是字符型:varchar或char),可以用=、<、>''来进行判断,null表示什么都没有(int、double、char等都可以是Null),即这个东西不存在,判断用is null或者is not null。
字段中如果出现null,对索引有一定的影响

没区别
有的系统默认写入 "" 数据库中为 null
其实无所谓 不过写入 null 在读取该字段为null值得纪录时有用 其他没什么用

没什么区别。


sql语句中怎么查询空字段
用另外一个额外的通配符来查找一些记录的例子。这个例子是如何选出上面的查询结果中,Description字段的第二子字母不是“e”的纪录。select Description from Northwind.dbo.Categories where patindex(’%[b,B]read%’,description)> 0 and patindex(’_[^e]%’,description)= 1 通过在条件语句中增加...

sql 数据库 NULL 和 空字符串的区别
空字符串:则是这里的“有对(列)变量输入数据”这一类情况,即有输入数据,只是输入的数据为空字符串(含有终止符的还是)。MSSQL对与NULL和空字符串的判断 --1、NULL判断select * from 表名 where 列名 is null--2、空字符串判断select * from 表名 where 列名=''--3、NULL和空字符串一并...

sql 字符串中有很多个空格字符,怎样去掉空格,并只保留一个空格_百度...
如果你的数据库不支持正则表达式替换的换的话,只有反复执行你的语句无数次了~如果支持正则表达式,可以使用正则表达式一次性把\\s+替换为空格。

查询结果忽略表中为空的字段。其余字段显示。怎么写sql,在线等。急
--有多少字段加多少个 Is Not NullSelect * From YourTable Where CST_NO Is Not Null And CST_NM Is Not Null And ACCT_NO1 Is Not Null And CURR1 Is Not Null And ACCT_NO2 Is Not Null And CURR2 Is Not Null And ACCT_NO3 Is Not Null ...

如何使用SQL找出oracle字段中出现空白部分的字符是什么?
sql中判断非空不能用等号,因为null在sql中被看作特殊符号,必须使用关键字 is和not select * from A where info is not null

sql 中 A表内dw字段为空时查不到数据
a.dwbh *= c.dwbh 这种方式最好少用 select a.rq,a.djbh,c.dwmch,b.spmch,b.dw,b.shpgg,b.shpchd,a.shl,a.username,b.ywy from quehuospmx a(nolock),spkfk b(nolock),mchk c(nolock)where a.spid=b.spid and a.dwbh *= c.dwbh 建议使用:select a.rq,a.djbh,c.dwmch,...

sql多表查询语句 当第一个表中某个字段为空和第二表中的某个字段为空...
select case when a.id is null then b.id when b.id is null then a.id end,from table1 a, table2 b wher talbe1.id=table2.id;或者:select decode(a.id,'',b.id,a.id) id from table1 a, table2 b wher talbe1.id=table2.id;

sql 数据库 NULL 和 空字符串的区别
NULL是没有值的意思。空字符:有值,这个值是空。

sql如何查询字段值为空的的字段名称
首先选择一张表 其次明确要查询的字段 select 字段名称 from 表名 where 字段名称 is null

sql查询字段是空的语句并且空值用0代替怎么写?
--列是字符类型的select isnull(列名,'0') as 列名 from 表名--列是数字类型的select isnull(列名,0) as 列名 from 表名

峨眉山市15074101992: sql 数据库 NULL 和 空字符串的区别 -
之爽肺力: null表示不存在,空字符串表示他也是一个.打个比方,就像一个教室里面每个人安排一个座位,普通数据就相当于坐在座位上的人,空字符串表示这个人没有,我们不知道他是谁,但是我们为他留了一个座位,而null代表这个人根本不存在,不仅没看到人,连座位也不给他留.

峨眉山市15074101992: SQLSERVER NULL和空字符串的区别 使用NULL是否节省空间 -
之爽肺力: 对于varchar数据类型,无论是空字符串还是NULL值都不占用任何空间 对于char数据类型,无论是空字符串还是NULL值都占用空间,所占用空间大小取决于建表时候指定的char数据类型的大小 具体见下面的图文教程分析实例 http://www.cnblogs.com/lyhabc/p/3312172.html

峨眉山市15074101992: sql null 和""区别 -
之爽肺力: '' 表示空字符串 null表示什么都没有,什么都不是 判断'' 用 ='' 或 '' , 而null 用is null 或is not null,字段中如果出现null 会对查询语句造成影响有可能导致索引失效,所以字段中尽量不要出现null ,用'' 或其他字符代替 ,纠正一下其他人的观点:null不代表空字符串 哦, 代表表示什么都没有,什么都不是,可以出现在任意类型字段里面(int,decimal,varchar 等等都可以是null),''只能在varchar,char类型里面出现

峨眉山市15074101992: SQL 中如何判断字段为NULL 或 为空串 -
之爽肺力: --判断为NULL:IS NULL--判断为空:='' ,如果连空格也算空的话,可以先用LTRIM,RTRIM,REPLACE等方式把空格去掉再匹配 SELECT * FROM 表名 WHERE 字段名 IS NULL OR LTRIM(字段名) = ''

峨眉山市15074101992: 空字符串与NULL值的区别? -
之爽肺力: 空字符串与NULL值的区别在于:空字符串是"",会创建一个对象,内容是“”,有内存空间. 而null,不会创建对象,没有内存空间,所对应的变量只是一个引用 空字符串是唯一在字母表Σ上,没有字符的字符串,标记为ε或λ.空字符串的长度为0.空字符串在内存中占一个字节. Null 是一特殊指标值(或是一种物件参照 reference)表示这个指标并不指向任何的物件.

峨眉山市15074101992: 如何正确理解 SQL 中的 NULL -
之爽肺力: SQL中Null的中文叫法是“空值”,其意思为"没有值"的值,它的数据类型是未知的,在数据库表里Null不占用物理磁盘空间,因为Null就是空无一物嘛,没有东西自然就没有占用.数据库表实际是二维表,新建表时所有的字段值都是Null(空...

峨眉山市15074101992: sql server 中的null和null的区别 -
之爽肺力: 在数据是未知数或者无法使用时,大多数的数据库管理系统将存储一个叫做Null值的特殊值.不要将它和零(一个合法数值)、零长度串(不含有字符的一种串数据类型)或空格字符混淆起来.SQL-3标准中把一个Null定义为: “...一个用来指明...

峨眉山市15074101992: 数据库空值和null的区别 -
之爽肺力: NULL是有值的,在MYSQL中有它自己的表示方法,而且在逻辑运算的时候,比如2 AND NULL 结果为NULL可是空值代表没有这项,运算的时候不考虑.所以PHP读出来的时候是不一样的NULL不知道是什么数值(我忘记了),空串会显示没有这项(为空,要不就是会出错,我忘记了)`~所以编程的时候自己要注意自己数据库里存了什么.记得的话,应该不再会遇到这种问题了.

峨眉山市15074101992: MySQL 中NULL和空值的区别 -
之爽肺力: "空值"是对null值的中文叫法,两者同指一个东西.我想楼主是想弄清楚null(空值)与零长度字符串''(或称为空字符串)之间的区别.在代码里"零长度字符串"用一对没有间隔的英文引号''表示,它的数据类型是明确的即属于字符型,存储"零长度字符串"是要占用物理磁盘空间的;而null值其数据类型是未知的,它不会占用物理磁盘空间.在不存在约束限制的情况我们可以将Null值插入任何数据类型的字段里,而零长度字符串''只能插入到字符型数据类型字段中,插入其它类型字段会报错.

峨眉山市15074101992: sql server的sql语句怎么判断一个字段是否为空 -
之爽肺力: 使用 is null 或 is not null 来处理列的空值.语法为: 列名 is null (字段为空返回true ,不为空返回 false) 列名 is not null (字段为空返回false,不为空返回 true)例如: select case when a is null then 1 else 0 end from aaa语法大意:如果a列 ...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网