MySQL的数据类型包括数字类型、时间与日期类型、字符串类型、空间数据类型等,本文详细介绍数字类型的相关知识。
1 数字类型简介
MySQL的数字数据类型分为四种:位数据类型、整数数据类型、定点数据类型和浮点数据类型。每种数字类型又分为多种常用的数据类型,如下所示为常见类型的信息总结:
2 需要注意的地方
2.1 显示宽度
在形如TINYINT(M)、MEDIUMINT(M)、INTEGER(M)或BIGINT(M)的数据类型定义中,M代表需要显示的数字的位数,该值大小并不会对数据类型所能承载的值范围有影响。对于宽度M的设定,如果该列的数据位数没有达到M位,那么会从左使用空格补齐,如果该列数据已经超出M位,也不会影响数据的正常显示。数据的宽度补齐默认使用空格,在列声明时,添加ZEROFILL可以使用0进行补齐,如下建表语句使用ZEROFILL进行填充:
查看表内容时,其补齐如下图所示:
2.2 BIT类型的数据使用
如下建表语句:
BIT为位数据类型,代表二进制数据类型,可以使用其所规定的数据范围的数字进行插入,也可以使用bval(b可大写)形式或0bval(b必须小写)的形式来插入数据,如下所示:
对于二进制字符可以使用[_charset_name] bval [COLLATE collation_name]语法形式来设置其字符集与校验集,如INSERT INTO test SET col = _latin1 0b1111111111 COLLATE latin1_swedish_ci;
在查询二进制数据时,可以使用+0或CAST(... AS unsigned)将其转换成整型,也可以使用BIN、OCT、HEX等分别获取其二进制、八进制、十六进制的字符串,如下图所示:
2.3 浮点类型的不准确性
浮点类型包括单精度浮点类型的FLOAT和双精度浮点类型的DOUBLE,在使用时应该注意浮点类型的数据存放的都是近似值,所以在使用浮点类型进行计算时,可能会产生某些不可预料的偏差,如下数据准备:
其结果如下所示:
如上图前5行按计算规则本该相同,但是其出现不同就是由于浮点数类型的近似值表示产生了差异导致,如果在实际应用中需要浮点类型进行比较,可以使用相减,使其差值小于或大于可以接受的范围,如使用SQL如:
2.4 数据类型的参数
在声明数据类型数据时,可以对列进行参数设置,如:
1> ZEROFILL,当宽度左侧补充时,用0替代空格;
2> UNSIGNED,设置该列类型为无符号属性,不允许存在负值;
3> NOT NULL,该列不允许为空;
4> AUTO_INCREMENT,设置整型和浮点型自增;
在使用过程中应该注意以下几点:
1> UNSIGNED用于整型类型时,可以扩大其存储数值的范围,但是用于浮点型时,仅能够限制其不出现负值;
2> 设置AUTO_INCREMENT属性的列上必须要存在索引;当使用插入语句时,如果对该列设置值为NULL,那么会使用递增规则进行值的设置;sql_mode中如果不设置NO_AUTO_VALUE_ON_ZERO时,向自增列插入0值也会引起自增规则进行值设置。
2.5 数据的溢出
当系统变量sql_mode设置了严格的SQL模式如SET sql_mode=TRADITIONAL时,对该列设置的数据超过了其数值范围,则会报错,当为使用严格模式如SET sql_mode=\时,则会根据类类型对设置的值进行裁剪,系统在进行ALTER TABLE、LOAD DATA、UPDATE、INSERT等操作时会对该裁剪报出warning信息,但是在数值表达式的求值过程中发生溢出是会报错的。
3 总结
本文详细总结了MySQL中各数字类型的基础知识与使用方法,总结了应用中的注意事项:
1> 在使用数据类型列时,需要根据实际应用对类型声明做出参数设置;
2> 浮点型数据的不准确性会来带一定的应用隐患,在应用中较多用来存放那些不要求特别准备的数据,在取值或运算中,最好是与标准容错值进行比较后使用,在要求准确的引用如货币、利率等存储中,要用精准的数据类型如DECIMAL;
3> 选择使用数据类型时,需要考虑数据类型的存值范围,并不一定是越大越好,也不一定是越小越好,需要考虑应用的性能、扩展、升级等各方面因素,设置合适的数据类型。
如果觉得《一篇文章搞懂mysql的数字数据类型》对你有帮助,请点赞、收藏,并留下你的观点哦!