mysql字段类型详解

/**
燕十八 公益PHP培训
课堂地址:YY频道88354001
学习社区:www.zixue.it
**/


=====================
数值型
=====================
1、整型
    ①tinyint
        占据空间: 1 字节
        存储范围:-128[-2^7]->127[2^7-1] 【有符号】, 0->255[2^8-1] 【无符号】
        备注:    
            计算机为了表示一个数是负数,会把最高位[左侧]的0/1,当成符号来看
                如果0 ->则是整数;  
                如果1 ->则是负数
                0 0000000  -->+0
                0 1111111   -->+127

                1 0000000 -->-0
                1 1111111  -->-127
            二进制补码问题
    ②smallint
        占据空间: 2 字节
        存储范围:-2^15->2^15-1 ;  0->2^16-1
    ③mediuint
        占据空间: 3字节
        存储范围:-2^23->2^23-1 ;  0->2^24-1
    ④int
        占据空间: 4 字节
        存储范围:-2^31->2^31-1 ;  0->2^32-1
    ⑤bigint
        占据空间: 8 字节
        存储范围:-2^63->2^63-1 ;  0->2^64-1

        ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
          + 默认:有符号
          + unsigned:表示无符号,可以影响存储范围
          + zerofill:zero是零,fill是填充,代表0    如:[000123]
          +    例:alter table table_name add s_num smallint(5) zerofill not null default 0;
          +      ①zerofill则同时必是unsigned
          +     ②如 int(M), zerofill填充的长度为M  如:int(5)--> [00000]
        ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

2、浮点型/定点型
    ①float(M, D)
        M叫"精度"----->代表"总位数",
        D叫"标度" ----->代表"小数位" 小数点右边的位数    
        占据空间: 4 字节
        存储空间:10^38    
        当M<=24时,占4个字节<float>    [0到23的精度对应FLOAT列的4字节单精度]
        否则,占8个字节<double>    [24到53的精度对应DOUBLE列的8字节双精度]
    ②decimal(M, D)
        把整数部分,和小数部分,分开存储 ,比float精确,float有损精度
        银行系统用decimal
        占据空间: 8 字节
        存储原理:
            小数点 前面的数据 用四个字节存储
            小数点 后面的数据 用四个字节存储
            一共8个字节
        

=====================
文本型
=====================
①char(M)[定长]
    M代表宽度:0<=M<=255之间
    char型,如果不够M个字符,内部用空格不起,取出时再把[右侧空格]删掉
    注意:如果存储时,右侧本身有空格,将会丢失
    定长速度快
②varchar(M)[变长]
    M代表宽度:0<=M<=65535之间(以ascii字符为例, utf8 22000左右)
    存储的字符串规则:前缀[数据的实际长度]+数据  
    分配空间大小:分配的空间为实际存储的长度 而char为M的长度
    
③text[没有默认值 即:default '']
    BLOB和TEXT列[不能]有 默认值
④blob[二进制类型]
    存储图像、音频等二进制信息
    也可以存储 字符串
    blob在于防止因为字符集的问题,导致信息丢失
    比如:一张图片中有0xFF字节,这个在ascii字符集认为非法,在入库的时候,被过滤




=====================
日期型
=====================
①date
    YYYY-mm-dd
    4个字节
    1000-01-01<->9999-12-31
②time
     HH:ii:ss
     3个字节
    -838:59:59<->838:59:59
③datetime
    8个字节
    YYYY-mm-dd HH:ii:ss
④year
    YYYY和YY
    1个字节
    四位字符串,范围为'1901'到'2155'。
    两位字符串,范围为'00'到'99'
    非法YEAR值被转换为0000
⑤timestamp
    'YYYY-MM-DD HH:MM:SS'
    4个字节
    TIMESTAMP列用于INSERT或UPDATE操作时记录日期和时间
    如果你不分配一个值,表中的第一个TIMESTAMP列自动设置为最近操作的日期和时间
    也可以通过分配一个NULL值,将TIMESTAMP列设置为当前的日期和时间
    CREATE TABLE test (
        ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP
    );
    系统常量:CURRENT_TIMESTAMP 取得当前系统时间

    【时间戳】。范围是'1970-01-01 00:00:00'到2037年。

原文地址:https://www.cnblogs.com/qintangtao/p/2753559.html