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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 卡尔曼滤波、扩展卡尔曼滤波、无迹卡尔曼滤波以及粒子滤波原理

    卡尔曼滤波、扩展卡尔曼滤波、无迹卡尔曼滤波以及粒子滤波原理所有滤波问题其实都是求感兴趣的状态的后验概率分布,只是由于针对特定条件的不同,可通过求解析解获得后验概率(KF、EKF、UKF),也可通过大数统计平均求期望的方法来获得后验概率(粒子滤波)。KF、EKF、UKF定义KF、EKF、UKF都是一个隐马尔科夫模型与贝叶斯定理的联合实现。是通过观测信息及状态转移及观测模型对状态进行光滑、滤波及预测的方法。而KF、EKF及UKF的滤波问题都…

    2022年6月17日
    32
  • 爱奇艺vip会员账号共享怎么用_爱奇艺的vip都和谁有合作

    爱奇艺vip会员账号共享怎么用_爱奇艺的vip都和谁有合作之前没事的时候,使用nmap检测到路由器存在弱口令admin今天没事登录路由器看看哪台机器流量比较多,刷新了几次流量统计,发现10.0.0.81的机器一直排的首位,流量蛮大,于是想看看这台机器在干什么打开我的kali系统,启动arpspoof,准备命令arpspoof-ietho-cown-t10.0.0.8110.0.0.1启动Wireshark,设置过滤条件i

    2022年9月28日
    0
  • yum彻底卸载软件包(包含依赖)

    yum彻底卸载软件包(包含依赖)概述yum命令安装软件包会同时安装需要的依赖包,但yumremove却只卸载这个文件包本身,如果需要删除安装时附加的依赖包,则可以使用yumhistory的相关操作实现回滚。具体操作查看yum操作(事务)历史[root@localhost~]#yumhistorylist或yumhistoryLoading”fastestmirror”pluginConfigtime:0.007Yumversion:3.4.3ID|Loginuser

    2022年5月2日
    1.7K
  • 深入浅出python 百度网盘_python的算法有哪些

    深入浅出python 百度网盘_python的算法有哪些关于sharingyourcode问题按照书上面的步骤,首先prepareyourdisribution创建了一个名为nester的文件夹,在文件夹中创建了nester.py和setup.py两个文件。按照步骤接下来Buildadistributionfile-》InstallyourdistributionintoyourlocalcopyofPyth

    2022年10月17日
    0
  • SPI接口简介-Piyu Dhaker

    SPI接口简介-Piyu DhakerSPI接口简介作者:PiyuDhaker串行外设接口(SPI)是微控制器和外围IC(如传感器、ADC、DAC、移位寄存器、SRAM等)之间使用最广泛的接口之一。本文先简要说明SPI接口,然后介绍ADI公司支持SPI的模拟开关与多路转换器,以及它们如何帮助减少系统电路板设计中的数字GPIO数量。SPI是一种同步、全双工、主从式接口。来自主机或从机的数据在时钟上升沿或下降沿同步。主机和从机可以同时传输数据。SPI接口可以是3线式或4线式。本文重点介绍常用的4线SPI接口。接口图1.含主机和从

    2022年6月22日
    67
  • 9iDataGurad报ORA12154TNScouldnotresolveservicename

    9iDataGurad报ORA12154TNScouldnotresolveservicename原9iDataGurad报ORA-12154:TNS:couldnotresolveservicename错误https://blog.csdn.net/tianlesoftware/article/details/4875026版权声明:https://blog.csdn.net/tianlesoftware/article/details/4875026平台:or…

    2022年7月19日
    9

发表回复

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

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