varcahr、char、int、decimal、double、round()、floor()、ceiling()

来源:互联网 发布:图片数字识别软件 编辑:程序博客网 时间:2024/06/13 23:46

round(),floor(),ceiling()函数的区别

  • round() 四舍五入,把原值转化为指定小数位数,如:round(1.45,0)=1;round(1.55,0)=2
  • floor() 向下舍去指定小数位数,如:floor(1.45,0)=1;floor(1.55,0)=1
  • ceiling()向上舍入指定小数位数,如:ceiling(1.45,0)=2;ceiling(1.55,0)=2

decimal、float和double的区别

  • float单精度浮点 32bit。有效数字7位
  • double双精度浮点 64bit。有效数字15位
  • decimal高精度浮点 128bit。有效数字28位

注:
float和double是基本类型,数字溢出不会报错,会有精度损失。
decimal不存在精度损失,数值溢出会报错。常用于银行账目计算。

char和varchar区别

char(N) 保存固定长度的字符串。N范围:0~255(2^8-1);varchar(N)保存变长字符串0~65535(2^16-1)。
- char保存数据时,即使没有达到最大长度,系统也会为期分配固定的存储空间,造成磁盘空间浪费。
- varchar长度是可变的。内容开头用1-2个字节表示存储长度信息(实际长度超过255需要2个字节)。

Q:varchar字段的几行数据顺序写到磁盘之后,然后update这个varchar字段变长,在磁盘上是怎么存的?
varchar是用于保存可变长度的字符串。而磁盘存储的是字符串的实际长度,所以对varchar字段变长,对磁盘存储无影响(我的理解)
假如设定varchar(50),更改前存储字符长度是10位,此时系统分配10个存储位置,更改后,字符长度变为20位,没有超过50位数据库可以进行存储。但原来的存储位数无法满足需求,系统需要进行额外的操作,根据存储引擎的不同,会有拆分机制或者分页机制。

项目中建议:

1.长度有限,使用char。如姓名。空间的浪费不会很大。
2.长度接近使用char。如MD5哈希值、身份证号等。
3.碎片角度考虑。char是一次性分配存储空间,存储在一起。varchar不可避免碎片问题。
4.varchar不可随意分配过大。varchar(100)和varchar(200),存储相同长度的字符串,磁盘上需要的存储空间是相同的,但对于内存的消耗是不同的。内存中试图用字符类型中定义的长度,即200字符空间。这对于排序和临时表产生较大影响。varchar在分配长度时需要评估实际长度。1+10%~20%

优缺点:

InnoDB引擎,表的数据行内部存储格式对固定长度的数据行和可变长度的数据行不加区分(所有数据行共用一个表头部分,这个表头部分存放着指向各有关数据列的指针),因char类型通常比varchar类型占用更多存储空间,故从减少占用磁盘空间和磁盘IO考虑,使用varchar类型更有利。
注意,varchar还有一个问题,可以自动适应存储空间,对节约磁盘空间有利,但是,在内存中是按照定义长度申请,长度大小对内存消耗有一定影响,所以,在varchar类型选择上不能过分慷慨,最好根据需求均衡。

int(30)和varchar(30)的30表示含义

  • varchar(30) 30表示可存储的字符串长度。中文字符和数字占用的字符长度一致。
  • int(30) 30表示显示长度。存储长度-2^31~2^31-1。起始位是符号位,所以是31次方。
原创粉丝点击