zoukankan      html  css  js  c++  java
  • 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...)
    
  • 相关阅读:
    [NOIP2012] 开车旅行
    八皇后
    [Noip2014] 解方程
    [Noip2012] 国王游戏
    [JZOJ4685] 【NOIP2016提高A组8.12】礼物
    [JZOJ100043] 【NOIP2017提高A组模拟7.13】第K小数
    大整数类模板
    [BZOJ2460] [BeiJing2011]元素
    [BZOJ5299] [CQOI2018]解锁屏幕
    [JZOJ4737] 【NOIP2016提高A组模拟8.25】金色丝线将瞬间一分为二
  • 原文地址:https://www.cnblogs.com/tcpblog/p/9997733.html
Copyright © 2011-2022 走看看