mysql 数据类型

五,  mysql 中数据类型:
    1. 整型
    2. 浮点型
    3. 日期
    4. 字符类型
    5. 枚举和集合类型
    //注意boolean值(用整型表示)>>>>tinyint(1)

    1 整形
        有符号(默认), 无符号(unsigned),   用0填充: zerofill
        约束的作用:  保证数据的完整性和一致性:
        # tinyint  极小整型 (默认有符号 +/-)  //占一个字节
            tinyint[(m)] [unsigned] [zerofill]
            有符号 [-128~127]
            无符号  0-255


        # int 整型 // 占4个字节
            int[(m)] [unsigned] [zerofill]
            有符号 -2147483648 ~ 2147483647
            无符号  0 ~ 4294967295

        # bigint 大整数   //占8个字节
            bigint[(m)] [unsigned] [zerofill]
            有符号: -9223372036854775808 ~ 9223372036854775807
            无符号:  0~18446744073709551615

        #smallint 占两个字节 ()
            有符号: [-32768, 32768]
            无符号: [0, 65535]
        #mediumint 占三个字节
             有符号: [-8388608, 8388607]
             无符号: [0, 16777215]

    2 浮点型:
           # float  占四个字节(单精度)
                folat[(M, D)]
           #double  占8个字节(双精度)


           # decimal(M, D)  >>> 如果M>D, M+2, 否则 D+2   (小数值)  (  内部存储的是字符, 所以相对准确)
                        这里M 是整数部分总个数, D是小数后个数, M最大65, D最大30


    3. 日期类型
        YEAR 年份 1901-2155

        DATE 日期(年月日) yyyy-MM-DD (1000-01-01/9999-12-31)

        TIME  时分秒 HH:MM:SS('-838:59:59'/'838:59:59')

        DATETIME  年月日+时分秒  YYYY-MM-DD HH:MM:SS(1000-01-01 00:00:00/9999-12-31 23:59:59    Y)

        TEIMSTAMP   年月日+时分秒
        //在实际应用的很多场景中,MySQL的这两种日期类型都能够满足我们的需要,存储精度都为秒,但在某些情况下,会展现出他们各自的优劣。
            下面就来总结一下两种日期类型的区别。

            1.DATETIME的日期范围是1001——9999年,TIMESTAMP的时间范围是1970——2038年。

            2.DATETIME存储时间与时区无关,TIMESTAMP存储时间与时区有关,显示的值也依赖于时区。在mysql服务器,
            操作系统以及客户端连接都有时区的设置。

            3.DATETIME使用8字节的存储空间,TIMESTAMP的存储空间为4字节。因此,TIMESTAMP比DATETIME的空间利用率更高。

            4.DATETIME的默认值为null;TIMESTAMP的字段默认不为空(not null),默认值为当前时间(CURRENT_TIMESTAMP),
            如果不做特殊处理,并且update语句中没有指定该列的更新值,则默认更新为当前时间。

    4 . 字符类型
        char 字符长度 0-255 占用4个字节
            定长: 简单, 浪费空间, 存取速度快
            存储:  存储char类型的数值, 会往右填充空格来满足长度 ,
                    (pad_char_to_full_length  sql模式, 自动清除尾部空格),
                    设置方法  sql_mode='PAD_CHAR_TO_FULL_LENGTH';
                    查询模式 :  select @@sql_mode;

        varchar 0-5个字节
            变长, 精准(保存输入的空格), 节省空间, 存取速度慢 长度 0-65535
                    字符长度范围:0-65535(如果大于21845会提示用其他类型 。mysql行最大限制为65535字节,字符编码为utf-8:https://dev.mysql.com/doc/refman/5.7/en/column-count-limit.html)
            存储:
                varchar类型存储数据的真实内容,不会用空格填充,如果'ab  ',尾部的空格也会被存起来
                强调:varchar类型会在真实数据前加1-2Bytes的前缀,该前缀用来表示真实数据的bytes字节数(1-2Bytes最大表示65535个数字,正好符合mysql对row的最大字节限制,即已经足够使用)
                如果真实的数据<255bytes则需要1Bytes的前缀(1Bytes=8bit 2**8最大表示的数字为255)
                如果真实的数据>255bytes则需要2Bytes的前缀(2Bytes=16bit 2**16最大表示的数字为65535)

            检索:
                尾部有空格会保存下来,在检索或者说查询时,也会正常显示包含空格在内的内容


        length();  查询字节数
        char_length(); 查询字符数
        (#常用字符串系列:char与varchar
            注:虽然varchar使用起来较为灵活,但是从整个系统的性能角度来说,char数据类型的处理速度更快,有时甚至可以超出varchar处理速度的50%。因此,用户在设计数据库时应当综合考虑各方面的因素,以求达到最佳的平衡

            #其他字符串系列(效率:char>varchar>text)
            TEXT系列 TINYTEXT TEXT MEDIUMTEXT LONGTEXT
            BLOB 系列    TINYBLOB BLOB MEDIUMBLOB LONGBLOB
            BINARY系列 BINARY VARBINARY

            text:text数据类型用于保存变长的大字符串,可以组多到65535 (2**16 − 1)个字符。
            mediumtext:A TEXT column with a maximum length of 16,777,215 (2**24 − 1) characters.
            longtext:A TEXT column with a maximum length of 4,294,967,295 or 4GB (2**32 − 1) characters)


    5. 枚举和集合:
          字段的值只能在给定范围中选择,如单选框,多选框

          枚举: enum 单选 只能在给定的范围内选一个值,如性别 sex 男male/女female

          集合: set 多选 在给定的范围内可以选择一个或一个以上的值(爱好1,爱好2,爱好3...)
原文地址:https://www.cnblogs.com/tcpblog/p/9997733.html