美文网首页
开发中常用的MySQL数据类型详解

开发中常用的MySQL数据类型详解

作者: 大佬Sam | 来源:发表于2019-06-11 19:34 被阅读0次

    前言

    每种编程语言都有自己所定义的数据类型,mysql也不例外,平时我们在创建表时,需要根据业务要求,结合存储、索引、字段临界值等条件来为字段定制不一样的类型。下面我们一起学习下mysql的几种常用的数据类型。

    Mysql中分为三大数据类型:数值型字符型时间日期型

    整型

    mysql中整数型数据类型就有五种: tinyint,smallint,mediumint,int,bigint

    tinyint:迷你整型,占用1个字节保存数据,能够表示256个数值 smallint:小整型,占用2个字节保存数据,能够表示65536个数值 mediumint:中整型,占用3个字节保存数据 int:标准整型,占用4个字节保存数据,42亿多 bigint:大整型,占用8个字节保存数据

    类型

    字节

    最小值(有符号/无符号)

    最大值(有符号/无符号)

    TINYINT

    1

    -128/0

    127/255

    SMALLINT

    2

    -32768/0

    32767/65535

    MEDIUMINT

    3

    -8388608/0

    8388607/16777215

    INT/INTEGE

    4

    -2147483648/0

    2147483647

    /4294967295

    BIGINT

    8

    -9223372036854775808/0

    9223372036854775807/18446744073709551615


    为什么要有这么多整型?

    1. 能够最大效率的使用磁盘空间,做到最少浪费。根据实际业务分配内存空间来进行数据保存。

    2. 查询的效率变高。

    如何在项目中选择使用何种整型? 根据业务需求,某一类数据的边界值,看边界值落在那个整型的范围,就是用最小的那个。 在实际操作中tinyint,int使用的较多

    整型表案例

    默认的,整型都是有符号类型

    无符号:表示数值只能是正的,不能有负数 语法:在字段类型后面使用unsigned进行标识 age tinyint unsigned;//年龄是一个迷你整型,无符号表示(0-255)

    更新数据

    显示宽度:占的位数,当某个数值没有达到显示宽度的时候,在数值的左边使用0来补足显示宽度(不能改变数值本身大小)

    默认的,系统不会进行0填充,需要给字段显示的增加一个属性:zerofill,0填充 系统默认显示的宽度是数据类型能够显示的最大宽度。 0填充有一个特点:使用0填充的字段必须为无符号类型,不能为负数进行0填充

    00填充是专门用来配合显示宽度:显示宽度只是在数据的值没有达到指定宽度的时候使用0填充,0填充或者显示宽度都不会限制原来值的大小,值的大小由数据类型决定。

    什么地方会使用显示宽度? 在一些需要使用0填充地方不改变原来值的大小,却能够用宽度来固定显示数据,保证前端数据的显示不会改变原来的css结构。比如说月份,日期,时间。

    小数型

    带有小数部分的数据。

    mysql中小数型分为两种:浮点型定点型

    浮点型:float和double float:采用4个字节保存数据 double:采用八个字节保存数据

    浮点数的存储使用4个字节32位存储,第一位叫做符号位,会使用符号位后面的8位用来存储街码(底数+指数),其他的用来表示数据。 浮点数会丢失精度 float:最大有效位7位左右 double:最大有效位为15位左右

    浮点数的使用方式 float(M,D):M表示整个长度,D表示小数位的长度

    数据处理

    浮点数只适用于那些对于数值精确要求不高,但是数量特别大的数据。 凡是跟钱相关绝对不用浮点数

    定点型:decimal 能够自动的扩展宽度来保存数据,保证数据的精度,基于小数部分,如果超出指定长度,仍然会进行四舍五入。 语法:decimal(M,D):M表示总长度,D表示小数部分的长度

    定点型与浮点型区别

    定点型的数据范围

    decimal(65,30)

    默认的,如果不使用括号标识decimal的长度,那么默认的是decimal(10,0); 凡是涉及到钱的都会在数据库端使用decimal来进行数据的存储和运算。

    字符串型

    mysql有以下字符串类型: char,varchar,text,blob,enum,set

    char

    定长字符串,表示磁盘会分配固定长度的空间去存储数据 如果数据不够长度,空间依然被占用 如果数据超出长度,系统会报错 语法:char(L),L表示长度,L表示的字符长度,L的最大值是255

    varchar

    变长字符串,表示磁盘空间会根据实际数据的长度来自动分配存储空间,但是长度不能超过指定长度varchar(L),存储的数据只能小于或者等于L个字符,L的理论值是65535 varchar在存储之外还有一个额外的1到2个字节来保存当前varchar的实际占用长度

    char和varchar对比(utf8) :一个字符 = 3个字节

    字符 Char(4)占字节数 Varchar(4)占字节数 Char实占字节数 Varchar实占字节数
    A 4 * 3 = 12 4 * 3 + 1 = 13 12 3 + 1 = 4
    ABCD 4 * 3 = 12 4 * 3 + 1 = 13 12 13

    char和varchar区别

    1. char的效率比varchar要高

    2. varchar比char节省空间

    text:字符串文本

    blob:二进制文本

    在记录里面不计算长度(不占记录长度),基本可以“无限”存储数据

    数据库的字符串类型有很多,但是是从数据库管理员的角度出发去考虑问题。

    1. 考虑磁盘空间的开销

    2. 考虑执行效率 作为PHP程序员,基本不考虑这些,只考虑如何能够方便PHP进行操作。所以真正配合PHP使用的字符串:char,varchar,和text

    数据库的字符串类型有很多,但是是从数据库管理员的角度出发去考虑问题。

    1. 考虑磁盘空间的开销

    2. 考虑执行效率

    作为PHP程序员,基本不考虑这些,只考虑如何能够方便PHP进行操作。所以真正配合PHP使用的字符串:char,varchar,和text

    时间日期型

    类型

    显示格式

    取值

    存储空间

    零值   

    DATETIME

    YYYY-MM-DD HH:MM:SS

    '1000-01-01 00:00:00''9999-12-31 23:59:59'

    8

    0000-00-00 00:00:00

    TIMESTAMP

    YYYY-MM-DD HH:MM:SS

    ‘1970-01-01 00:00:00’2038-01-19 03:14:07

    4

    0000-00-00 00:00:00

    DATE

    YYYY-MM-DD

    '1000-01-01''9999-12-31

    3

    0000-00-00

    TIME

    HH:MM:SS

    -838:59:59''838:59:59'

    3

    00:00:00

    YEAR

    YYYY

    19012155

    1

    0000

    datetime:表示年月日时分秒,能够表示9000年,占用8个字节 timestamp:时间戳,使用标准整型存储,表现却是年月日,时分秒 date:日期部分,可以表示1000-9999年 time:时间部分,表示的是一个时间段,从过去什么时间到以后的某个时间 year:年,使用一个字节存在,一个字节只能表示256个数值,在计算的时候加上1900再输出


    timestamp时间戳并不能使用真正的时间戳

    总结

    以上介绍了我们平时常用的mysql类型,掌握好这几种类型,可以很好地应用在项目的业务中。当然,还有其他的类型大家也要去了解下,比如枚举类型,set类型等。

    *如有错误请留言指正。

    推荐阅读

    看完这一篇,相信你会熟悉mysql的基本用法


    MySQL常用语句命令总结

    PHP+MySQL实现海量数据导入导出的一些总结

    多进程PHP脚本实现海量数据转移总结

    更多分享欢迎关注公众号【php_beginner】!


    相关文章

      网友评论

          本文标题:开发中常用的MySQL数据类型详解

          本文链接:https://www.haomeiwen.com/subject/cvscfctx.html