mysql---mysql中的整数和字符串类型

一.为表中的字段选择合适的数据类型的原则

当一个列可以选择多种数据类型时,应该优先考虑数字类型,其次是日期或者二进制类型,最后是字符类型,对于相同级别的数据类型,应该优先选择占用空间小的数据类型
理由:
1)在对数据进行比较时,字符类型处理与当前所使用的排序规则是相关的, 而数字和二进制是按照二进制大小来进行的,同样的数据,字符类型比数字处理慢
2)在数据库中,数据处理 是以页为单位的,每页的大小是恒定的,在innodb中,每页的大小是16k,数据占用空间越小,页中能容纳的数据个数就越多,减少磁盘IO,有利于性能的提升

二.如何选择正确的整数类型

1.整数类型

在这里插入图片描述
经常被问的面试题:int(2)和int(11)有区别吗?int(2)占用的存储空间会比int(11)少吗?
答案是没区别,不会少,他们占用的存储空间都是4个字节,如果只是存储两位数的数,想要节省空间可以选用tinyint来存储

2.实数类型:

在这里插入图片描述
float和double是非精确的,非精确的含义是指在对float和double类型进行计算时,会出现误差,而使用decimal就不会,所以如果是像银行中的业务,一般需要选择decimal来存储

三.如何选择varchar和char类型

1.varchar数据类型的存储特点

1)varchar是用于存储变长的字符串,只占用必要的存储空间,例如有一个varchar(50)的列,而实际只存储了10个字符,那这个列实际就只占了10个字符
2)列的最大长度小于255则只占用一个额外的字节用于纪录字符串长度,列的最大长度大于255,则要占用两个额外字节用于纪录字符串长度

2.varchar长度的选择问题

1)使用最小的符合需求的长度,但也不能不顾实际情况,把它设计得非常的小,然后考虑等之后有需要再回来修改,这种想法是十分不正确的,在mysql5.7之前,不管是将varchar的长度改长或者改短,都会进行锁表,在5.7之后,如果原来的宽度小于255,修改后的宽度也小于255,那就不会锁表,其他情况下会锁表
2)面试题:varchar(5)和varchar(200)来存储’mysql’字符串性能相同吗?
答案是有区别的,虽然它们都不超过255,只需要5个字符加一个字节来存储就够了,但是mysql为了更有效的优化查询,在内存中对字符串使用的是固定的宽度,所以如果把列的宽度设置得太长,就会消耗内存,影响性能
3.varchar的适用场景
1)字符串列的最大长度比平均长度大很多的情况
2)字符串列很少被更新
3)使用了多字节字符集存储字符串,例如utf-8

3.char类型的存储特点

1)char类型是定长的
2)字符串存储在char类型的列中会删除末尾的空格,而字符串存在varchar类型中时末尾的空格不会被删除
3)char类型的最大宽度为255

4.char类型的使用场景

1)char适合存储长度近似的值,例如MD5值,身份证,手机号等
2)char类型适合存储短字符串,例如性别,因为varchar还要多出一个字节来存储字符串长度
3)char类型适合存储经常更新的字符串列

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值