varchar和char的区别——时间换空间,空间换时间!+++大话说null!

varchar和char的区别——时间换空间,空间换时间!

在最近的数据库学习中,varchar、char、null出现率比较高,借此机会把学到的总结一番相互学习。

在这里插入图片描述
char是一种固定长度的类型,char(x)类型的数据列里,每个值都占用x个字节,如果某个长度小于x,MySQL就会在它的右边用空格字符补足.(在检索操作中那些填补出来的空格字符将被去掉).char是项目中常用的字段类型之一,它代表的含义是采用固定长度存储数据,换句话说,数据初始化的是就为该类型的字段分配固定长度的存储空间,即使没有达到存储空间的长度,实际占用的存储空间也是定义时的长度。举个例子来说,比如某字段 a char(50),指定的长度是50个字符的存储空间,那么当你存入一个字符:“abcd”的时候,实际上字符长度是4个字符,但是占用的硬盘空间还是50个字符。很显然,char的缺点就出来了:浪费存储空间!但是同时char的优点也显示出来了:固定长度,(索引)效率极高,不存在碎片。故称为用空间换时间

varchar则是一种可变长度的类型, 在varchar(x)类型的数据列里,每个值只占用刚好够用的字节再加上一个用来记录其长度的字节(即总长度为L+1字节).varchar是存储可变长度的字符串,简单的说我们定义表机构的时候指定的字段长度是最大长度,当字符串没有达到最大长度的时候以字符串的实际长度来存储的,不占用多余的存储空间。因此,一般情况下,varchar比char节省存储空间。但效率相比较低,故称为用时间换空间

**

大话说null!

在这里插入图片描述

在java中:
(1)首先,null是关键字,像public、static、final。它是大小写敏感的,你不能将null写成Null或NULL,编译器将不能识别它们然后报错。。null表示类或对象的变量是空,它不代表任何对象或实例;null可以赋值给引用类型变量,但不可以将null赋给基本类型变量;任何对象在没有进行初始化时,它的默认值都是null。(可以借此去看看引用类型变量和基本类型变量,结合栈堆内存可以更好的理解)
(2)就像每种基本类型都有默认值一样,如int默认值为0,boolean的默认值为false,null是任何引用类型的默认值,不严格的说是所有object类型的默认值,Java中的任何引用变量都将null作为默认值。这对所有变量都是适用的,如成员变量、局部变量、实例变量、静态变量(但当你使用一个没有初始化的局部变量,编译器会警告你)。为了证明这个事实,你可以通过创建一个变量然后打印它的值来观察这个引用变量。
(3)null既不是对象也不是一种类型,它仅是一种特殊的值,可以将其赋予任何引用类型,也可以将null转化成任何类型,来看下面的代码:
String str = null;
Integer i = null;
String string = (String) null;
Integer = (Integer) null; 在编译和运行时期,将null强制转换成任何引用类型都是可行的,在运行时期都不会抛出空指针异常。

在数据库中
null表示未知,不等于零或者空格,当一个列或常量有null值时,它的值是未知的。null!=null的原因,null(未知的)意味着该变量没有值,因此不能和其他非null值直接进行比较。没有数值比较的概念,就像站在两极上,你能指出东西南北四个方向吗?任何数跟NULL进行运算都是NULL,在查找到某一个字段是null的记录,最简单的想法可能是这样:select name from test where age = null。判断值是否等于NULL,不能简单用=,而要用is关键字, select name from test where age is null。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值