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

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类型适合存储经常更新的字符串列

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/2342.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 盗窃网络域名_域名实际上是与计算机什么对应的

    盗窃网络域名_域名实际上是与计算机什么对应的目录1域名基础1.1基本定义1.2主域名附加域名子域名2跨域访问原理和防盗链2.1防盗链2.2跨域访问原理2.2.1JSONP跨域原理2.2.2CORS跨域原理3四种跨域方法3.1JSONP3.2document.domain3.3window.name3.4[HTML5]postMessage1域名基础1.1基本定义一个完整的域名由二个或二个以上部分组成,各部分之间用英文的句号”.”来分隔,最后一个”.”的右..

    2022年9月28日
    6
  • idea的html注释快捷键,idea 方法注释的快捷键设置

    idea的html注释快捷键,idea 方法注释的快捷键设置前言:使用idea有过一段一段时间了,每次写完方法需要都需要注释,要么手动注释要么用快捷键(/**回车)默认模板注释,不符合项目规定的注释要求,于是想了想是不是设置自定义的注释模板,上网查了资料整理一篇心得分享给大家。正文:默认注释是的样子:/****@parambookType*@parampageNum*@parampageSize*@return*/publicPagina…

    2022年6月4日
    164
  • SpringBoot使用@ResponseBody返回图片[通俗易懂]

    SpringBoot使用@ResponseBody返回图片[通俗易懂]以前使用HttpServletResponse可以通过输出流的方式来向前台输出图片。现在大部分都是使用springboot,在使用springboot之后,我们应该如何来修改代码呢?SpringBoot项目搭建配置略过,可直接从官网简历一个demo首先写一个Controller类,包括一个方法,如下:packagecom.example.demo.common;…

    2022年5月8日
    254
  • python常见运维脚本_Python运维常用脚本[通俗易懂]

    python常见运维脚本_Python运维常用脚本[通俗易懂]一、清除指定redis缓存#!/usr/bin/envpython3importredis#选择连接的数据库db=input(‘输入数据库:’)r=redis.Redis(host=‘127.0.0.1’,port=6379,db=0)#输入要匹配的键名id=input(‘请输入要执匹配的字段:’)arg=‘’+id+’’n=r.keys(arg)#查看匹配到键值f…

    2022年7月12日
    16
  • 使用pycharm连接MySQL数据库的方法「建议收藏」

    使用pycharm连接MySQL数据库的方法「建议收藏」首先进入到mysql中,点击最右边的database,再点击绿色的+号选择添加MySQL数据库 如果屏幕右边没有的话可以点击上面的视图,点击工具窗口中就会有database选项 打开之后发现即使输入了里面的所需信息,还是无法点击TestConnection 原因是我们缺少了一个驱动 点击下面的mysql,我们现在缺少了一个java驱动。我们可以去官网下载:h…

    2022年8月26日
    11
  • 利用linux BT5来破解无线 破解无线[通俗易懂]

    利用linux BT5来破解无线 破解无线

    2022年1月21日
    103

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号