MySQL数据库中,通过存储引擎来觉得表的类型,即觉得表的存储方式。同时,MySQL中也提供了数据类型来觉得存储的数据的类型,MySQL中常见的数据类型有:整数类型,浮点数类型,定点数类型和为类型,日期和时间类型,字符串类型。
1.整数类型
1.1 我们知道计算机底层只识别二进制码,整数类型的数据也不例外,只不过整数是有符号数(正负数),因此二进制码表示的数左边第一个位代表符号位(0整数,1负数)。这里tinyint是1个字节,即8位二进制数。所以,tinyint的最大值可表示为:
,转换为十进制为:2^7-1; 最小可以表示为:
,转换为十进制为:-2^7。
1.2 MySQL支持数据类型后面指定该类型显示的宽度
(1)例如:int(4)表示int类型的数值显示宽度为4位,显示宽度和数据类型的取值范围是无关的。显示宽度只是指明MySQL最大可能显示的数字的个数,数值的位数小于指定的显示宽度时会在数字的左侧填充空格。如果插入了大于显示宽度的值,只要该值不超过该类型整数的取值范围,数值依然可以插入,而且能够显示出来。
几种整数类型的默认宽度分别是:
2.浮点类型和定点类型
2.1 MySQL中可以指定可以指定浮点型数据类型的精度
格式:float(m,d)、double(m,d);其中参数m称为精度,是数值的总长度,小数点不占位置;参数d是指小数点后的长度。例如,float(6,2)的含义是float类型,数据长度为6,小数点后保留2位。则:1234.56是符合要求的。
PS:(1)上述指定小数精度的方法虽然都适合于浮点数和定点数,但不是浮点数的标准用法。建议在定义浮点数时,如果不是实际情况需要,最好不要使用。
(2)对于定点数而言,decimal(m,d)是定点数的标准格式,一般情况下可以选择这种数据类型。
(3)如果插入值的精度高于实际定义的精度,系统会自动进行四舍五入处理,使值的精度达到要求。不同的是,float型和double型在四舍五入时不会报错,而decimal型会有警告。
2.2 精度使用举例
当我们插入的数据精度不满足定义的数据类型精度时,我们的数据任就能插入成功,但会有警告的错误信息提示。
当我们查询结果时发现数据被截断了,和原始数据相比MySQL采用了四舍五入的方法使得数据满足定义的精度。
ps:在MySQL中,定点数以字符串的形式存储,因此,其精度比浮点数要高,而浮点数会出现误差。如果要对数据的精度要求比较高,还是选择定点数(DECIMAL)比较安全。在对精度要求比较高的时候(如货币、科学数据等)使用DECIMAL的类型比较好,另外两个浮点数进行减法和比较运算时也容易出问题,所以在使用浮点型时需要注意,并尽量避免做浮点数比较。
3.日期和时间类型
ps: 如果存储年月日时分秒,并且年份的取值可能比较久远,最好使用datetime类型,而不是timestamp类型,因为前者比后者所表示的日期范围要长一些。如果存储的日期需要让不同时区的用户使用,则可以使用timestamp类型,因为只有改类型日期能够和实际时区相对应。
4.字符串类型