Mysql复习笔记(day06 数据类型)

  1. 整型
    (1)TINYINT 1个字节,有符号的取值范围是-128 ~ 127,无符号的取值范围是0 ~ 255.其一般用于枚举数据,比如系统设定取值范围很小且固定的场景
    (2)SMALLINT 2个字节,有符号的取值范围是-32768 ~ 32767, 无符号的取值范围是0 ~ 65535.其可用于较小范围的统计数据,比如统计工厂的固定资产库存数量等.
    (3)MEDIUMINT 3个字节,有符号的取值范围是-8388608 ~ 8388607, 无符号的取值范围是0 ~ 16777215.其用于较大整数的计算,比如车站每日的客流量等
    (4)INT、INTEGER 4个字节,有符号的取值范围是-2147483648~ 2147483647, 无符号的取值范围是0 ~ 4294967295.其取值范围足够大,一般不考虑超限问题,用的最多。
    (5)BIGINT 8个字节 ,取值范围…大概20位,只有处理巨大的整数才会用到。
    无符号的整型定义方法: 在创建表的时候,在字段名后加上 UNSIGNED 即可
    在定义整数类型的时候,其后面的括号表示的是显示的位数 ,需要配合ZEROFILL使用,不然和不加没有区别 , 如:
    CREATE TABLE xxx(
    xxx INT,
    xxx INT(5),
    XXX INT(5) ZEROFILL (使用ZERPOFILL会自动添加 UNSIGNED)
    );
    其中的第一和第二中没有任何区别,且在mysql8.0中,不建议再加上显示的位数。而第三个则是表示显示五位,不够的用零补充,且都可以超过五位。这个显示的位数并不能限制范围。
  2. 浮点数、定点数、位类型
    (1)FLOAT 表示单精度浮点数 四个字节,DOUBLE 表示双精度浮点数 八个字节。
    (2)FLOAT占用的字节少,取值范围小,DOUBLE占用的字节多取值范围大。
    (3)在整数类型中,无符号的正数取值范围会是有符号的正数取值范围的两倍,而在浮点数类型中,有无符号的正数取值范围却相同。因为MYSQL的浮点数的存储格式为符号S、尾数M、阶码E,因此无论有没有符号,MYSQL的浮点数都会存储表示符号的部分,因此在浮点数中的无符号取值就是大于等于零的部分。
    (4)MySQL允许使用非标准语法(其他数据库未必支持,因此如果涉及到数据迁移,则最好不要这么用)。FLOAT(M,D)或DOUBLE(M,D)。M为精度,D为标度。(M,D)中 M=整数位+小数位,D=小数位。D<=M<=255,8<=D<=30。
    例如,定义为FLOAT(5,2)的一个列可以显示为-999.99-999.99。当输入的小数位超过了指定的会四舍五入,整数位超过这个范围会报错。
    (5)DECIMAL(M,D) / DEC/ NUMERIC 字节数: M+2, 有效范围由M和D决定
    (6)使用DECIMAL(M,D)的方式表示高精度小数。其中,M被称为精度,D被称为标度。0<=M<=65,0<=D<=30,D<M。例如,定义DECIMAL (5,2)的类型,表示该列取值范围是-999.99~999.99。
    (7)定点数在MySQL内部是以字符串的形式进行存储,这就决定了它一定是精准的。
    (8)当DECIMAL类型不指定精度和标度时,其默认为DECIMAL(10,0)。当数据的精度超出了定点数类型的精度范围时,则MySQL同样会进行四舍五入处理.
    (9)DECIMAL(M,D)的最大取值范围与DOUBLE类型一样,但是有效的数据范围是由M和D决定的。DECIMAL的存储空间并不是固定的,由精度值M决定,总共占用的存储空间为M+2个字节。也就是说,在一些对精度要求不高的场景下,比起占用同样字节长度的定点数,浮点数表达的数值范围可以更大一些。
    (10)浮点数相对于定点数的优点是在长度一定的情况下,浮点类型取值范围大,但是不精准,适用于需要取值范围大,又可以容忍微小误差的科学计算场景(比如计算化学、分子建模、流体动力学等)
    定点数类型取值范围相对小,但是精准,没有误差,适合于对精度要求极高的场景(比如涉及金额计算的场景)
    (11) BIT类型,存储的是二进制值 类似010110. BIT(M),长度为M 1<=M<=64 约占(M+7)/8个字节,如果不指定M,默认为1位,也就是只能存一位二进制.
  3. 日期类型
    (1) YEAR类型用来表示年份,在所有的日期时间类型中所占用的存储空间最小,只需要1个字节的存储空间。在MySQL中,YEAR有以下几种存储格式:
    以4位字符串或数字格式表示YEAR类型,其格式为YYYY,最小值为1901,最大值为2155
    以2位字符串格式表示YEAR类型,最小值为00,最大值为99。
    在插入,修改数据的时候
    当取值为01到69时,表示2001到2069
    当取值为70到99时,表示1970到1999
    当取值整数的0或00的话,那么是0000年
    当取值是日期/字符串的’0’的话,是2000年。
    从MySQL5.5.27开始,2位格式的YEAR已经不推荐使用。YEAR默认格式就是"YYYY”,没必要写成YEAR(4),从MySQL8.0.19开始,不推荐使用指定显示宽度的YEAR(4)数据类型。
    (2)DATE类型表示日期,没有时间部分,格式为YYYY-MM-DD,其中,YYYY表示年份,MM表示月份,DD表示日期。需要3个字节的存储空间。在向DATE类型的字段插入数据时,同样需要满足一定的格式条件。
    以YYYY-MM-DD格式或者YYYYMMDD格式表示的字符串日期,其最小取值为1000-01-01,最大取值为9999-12-03。YYYYMMDD格式会被转化为YYYY-MM-DD格式。
    以YY-MM-DD格式或者YYMMDD格式表示的字符串日期,此格式中,年份为两位数值或字符串满足YEAR类型的格式条件为:当年份取值为00到69时,会被转化为2000到2069;当年份取值为70到99时,会被转化为1970到1999。
    使用CURRENT_DATE()或者NOW()函数,会插入当前系统的日期
    (3) TIME类型用来表示时间,不包含日期部分。在MySQL中,需要3个字节的存储空间来存储TIME类型的数据,可以使用“HH:MM:SS”格式来表示TIME类型,其中,HH表示小时,MM表示分钟,SS表示秒。
    在MysQL中,向TIME类型的字段插入数据时,也可以使用几种不同的格式。
    可以使用带有冒号的字符串,比如’D HH:MM:SS’、’ HH:MM:SS '、‘HH:MM’、‘D HH:MM’、 ‘D HH’,格式,都能被正确地插入TIME类型的字段中。其中D表示天,其最小值为0,最大值为34。
    如果使用带有D格式的字符串插入TIME类型的字段时,D会被转化为小时,计算格式为D*24+HH。当使用带有冒号并且不带D的字符串表示时间时,表示当天的时间,比如12:10表示12:10:00,而不是00:12:10。
    可以使用不带有冒号的字符串或者数字,格式为‘HMNSS’或者HMSS。如果插入一个不合法的字符串或者数字,mysql在存储数据时,会将其自动转化为00:00:00进行存储。比如1210,会将最右边的两位解析成秒,表示00:12:10,而不是12:10:00
    (4)DATETIME类型在所有的日期时间类型中占用的存储空间最大,总共需要8个字节的存储空间。在格式上为DATE类型和TIME类型的组合,可以表示为YYYY-MM-DD HH:MM:SS,其中YYYY表示年份,MM表示月份,DD表示日期,HH表示小时,MM表示分钟,SS表示秒。
    在向DATETIME类型的字段插入数据时,同样需要满足一定的格式条件。
    以YYYY-MM-DD HH:MM:SS格式或者YYYYMMDDHHMMSS格式的字符串插入DATETIME类型的字段时,最小值为1000-01-01 00:00:00,最大值为9999-12-03 23:59:59。
    以YYYYMMDDHHMMSS格式的数字插入DATETIME类型的字段时,会被转化为YYYY-MM-DD HH:MM:SS格式.
    以YY-MM-DD HH:MM:SS格式或者YYMMDDHHMMSS格式的字符串插入DATETIME类型的字段时,两位数的年份规则符合YEAR类型的规则,00到69表示2000到2069; 70到99表示1970到1999
    (5)TIMESTAMP类型也可以表示日期时间,其显示格式与DATETIME类型相同,都是YYYY-MM-DD HH:MM:SS,需要4个字节的存储空间。但是TIMESTAMP存储的时间范围比DATETIME要小很多,只能存储“1970-01-01 00:00:01 UTC”到"2038-01-19 03:14:07 UTC"之间的时间。UTC表示世界统一时间,也叫作世界标准时间。
    向TIMESTAMP类型的字段插入数据时,当插入的数据格式满足YY-MM-DD HH:MM:SS和YMMDDHHMMSS时,两位数值的年份同样符合YEAR类型的规则条件,只不过表示的时间范围要小很多。如果向TIMESTAMP类型的字段插入的时间超出了TIMESTAMP类型的范围,则MysQL会抛出错误信息。存储数据的时候需要对当前时间所在的时区进行转换,查询数据的时候再将时间转换回当前的时区。因此,使用TIMESTAMP存储的同一个时间值,在不同的时区查询时会显示不同的时间。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值