Django与SQL语言中——NULL与空字符串的区别

SQL有指定空值的独特方式,它把空值叫做NULL。

Null在数据库中表示 不知道的数据,主要有3种意思:

1)知道数据存在,但不知道具体值.

2)不知道数据是否存在.

3)数据不存在.

在SQL中, NULL的值不同于空字符串,就像Python中None不同于空字符串("")一样。这意味着某个字符型字段(如VARCHAR)的值不可能同时包含NULL和空字符串。

这会引起不必要的歧义或疑惑。 为什么这条记录有个NULL,而那条记录却有个空字符串? 它们之间有区别,还是数据输入不一致? 还有: 我怎样才能得到全部拥有空值的记录,应该按NULL和空字符串查找么?还是仅按字符串查找?

为了消除歧义,Django生成CREATE TABLE语句自动为每个字段显式加上NOT NULL。 这里有个第五章中生成Author模块的例子:

CREATE TABLE "books_author" (
    "id" serial NOT NULL PRIMARY KEY,
    "first_name" varchar(30) NOT NULL,
    "last_name" varchar(40) NOT NULL,
    "email" varchar(75) NOT NULL
)

在大多数情况下,这种默认的行为对你的应用程序来说是最佳的,因为它可以使你不再因数据一致性而头痛。 而且它可以和Django的其它部分工作得很好。如在管理工具中,如果你留空一个字符型字段,它会为此插入一个空字符串(而* 不是*NULL)。

但是,其它数据类型有例外:日期型、时间型和数字型字段不接受空字符串。 如果你尝试将一个空字符串插入日期型或整数型字段,你可能会得到数据库返回的错误,这取决于那个数据库的类型。 (PostgreSQL比较严禁,会抛出一个异常;MySQL可能会也可能不会接受,这取决于你使用的版本和运气了。)在这种情况下,NULL是唯一指定空值的方法。 在Django模块中,你可以通过添加null=True来指定一个字段允许为NULL

因此,这说起来有点复杂: 如果你想允许一个日期型(DateFieldTimeFieldDateTimeField)或数字型(IntegerFieldDecimalFieldFloatField)字段为空,你需要使用null=True * 和* blank=True

Django与SQL语言中——NULL与空字符串的区别

时间: 2024-12-04 15:47:22

Django与SQL语言中——NULL与空字符串的区别的相关文章

Oracle中Null与空字符串' '的区别

含义解释: 问:什么是NULL? 答:在我们不知道具体有什么数据的时候,也即未知,可以用NULL,我们称它为空,ORACLE中,含有空值的表列长度为零. ORACLE允许任何一种数据类型的字段为空,除了以下两种情况: 1.主键字段(primary key), 2.定义时已经加了NOT NULL限制条件的字段 说明: 1.等价于没有任何值.是未知数. 2.NULL与0.空字符串.空格都不同. 3.对空值做加.减.乘.除等运算操作,结果仍为空. 4.NULL的处理使用NVL函数. 5.比较时使用关键

springboot中返回值json中null转换空字符串

在实际项目中,我们难免会遇到一些无值.当我们转JSON时,不希望这些null出现,比如我们期望所有的null在转JSON时都变成“”“”这种空字符串,那怎么做呢? Jackson中对null的处理 1 @Configuration 2 public class JacksonConfig { 3 @Bean 4 @Primary 5 @ConditionalOnMissingBean(ObjectMapper.class) 6 public ObjectMapper jacksonObjectM

NULL与""空字符串的区别

""空字符串,会创建一个对象,分配内存空间 NULL,不会创建对象,不会分配内存空间,意思是不存在的 #include <iostream> using namespace std; int main() {         std::string strTemp;         if( strTemp.empty() )         {                 cout<<"is empty "<<endl;   

SQL Server中临时表与表变量的区别

2009年02月20日 星期五  19:31 我 们在数据库中使用表的时候,经常会遇到两种使用表的方法,分别就是使用临时表及表变量.在实际使用的时候,我们如何灵活的在存储过程中运用它们,虽然它们 实现的功能基本上是一样的,可如何在一个存储过程中有时候去使用临时表而不使用表变量,有时候去使用表变量而不使用临时表呢? 临时表 临时表与永久表相似,只是它的创建是在Tempdb中,它只有在一个数据库连接结束后或者由SQL命令DROP掉,才会消失,否则就会一直存在.临时表在创建的时候都会产生SQL Ser

mysql 判断null 和 空字符串

1.在mysql中null 不能使用任何运算符与其他字段或者变量(函数.存储过程)进行运算.若使用运算数据就可能会有问题. 2.对null 的判断: 创建一个user表:id 主健 name 可以为空 select * from user; insert into user values('33',null);  ##创建一条name为空的数据 insert into user values('222','');  ##创建一条为空字符的数据 用isnull判断是否为空:只有name 为null

velocity模板判断null和空字符串方法

在web开发中,经常会遇到一个需求是,判断变量为空(null)或者空字符串(""),从而影响页面的展示逻辑,velocity中有相应的方法可以判断.当然也可以在java后端转化到有效值再判断.以下是本人在开发中自己总结的,希望对大家有所帮助! (1)判断null #if( $name  ==  null) something code #end (2)判断null或者false #if( !$name) something code #end (3)判断null或者空字符串 #if(

SQL Server中Text和varchar(max)数据类型区别

SQL Server中Text和varchar(max)数据类型区别 以前只知道text和image是可能被SQL Server淘汰的数据类型,但具体原因不太清楚,今天读书的时候发现了text与varchar(max)和nvarchar(max)的区别,主要是对操作符的限制,text只能被下列函数作用: 函数 语句 DATALENGTH READTEXT PATINDEX SET TEXTSIZE SUBSTRING UPDATETEXT TEXTPTR WRITETEXT TEXTVALID

sql Server中临时表与数据表的区别

sql server 中临时表与数据表的区别 1.如何判断临时表和数据表已生成 --如何判断临时表是否已创建--- if exists(select * from tempdb..sysobjects where id=object_id('tempdb..#Temp_Student')) begin print '存在临时表'; end else begin print '不存在临时表'; end --如何判断数据表是否已创建--- if exists(select * from sys.ta

PHP递归方式把一个数组里面的null转换为空字符串”的方法

在一些接口的调用中,直接查询数据库出来的字段可能为null字段,但是为了简便前端的判断,需要把null转换成空字符串'',这个时候就需要递归的方式进行.直接上代码如下: //递归方式把数组或字符串 null转换为空''字符串 public function _unsetNull($arr){ if($arr !== null){ if(is_array($arr)){ if(!empty($arr)){ foreach($arr as $key => $value){ if($value ===