MySQL提供的数据类型包括数值类型(整数类型和小数类型)、字符串类型、日期类型、复合类型(复合类型包括enum类型和set类型)以及二进制类型。
4.1 MySQL整数类型
MySQL整数类型包括:tinyint类型、smallint类型、mediumint类型、int类型、bigint类型。
整数类型的数,默认情况下既可以表示正整数又可以表示负整数(此时称为有符号数)。如果只希望表示零和正整数,可以使用无符号关键字“unsigned”对整数类型进行修饰(此时称为无符号整数)。 例如:score tinyint unsigned
4.2 MySQL小数类型
MySQL小数类型包括:精确小数类型和浮点数类型。
精确小数类型包括:decimal精确类型
浮点数类型包括:float单精度类型、double双精度类型。
decimal(length, precision)用于表示精度确定(小数点后数字的位数确定)的小数类型,length决定了该小数的最大位数,precision用于设置精度(小数点后数字的位数)。
例如:decimal(5,2)表示小数取值范围:-999.99~999.99
decimal (5,0)表示: -99999~99999的整数。
4.3 MySQL字符串类型
MySQL字符串类型
字符串类型的数据外观上使用单引号括起来,例如学生姓名'张三'、课程名'java程序设计'等。
char类型与varchar类型比较:
1、都是字符串类型;
2、varchar比较智能,可以根据实际的数据长度分配空间,比较节省空间;但在分配的时候需要相关判断,效率低;
3、char不需要动态分配空间,所以执行效率高,但是可能会导致空间浪费;
4、若字段中的数据不具备伸缩性,建议采用char类型存储;
5、若字段中的数据具备很强的伸缩性,建议采用varchar类型存储。
4.4 MySQL日期类型
MySQL日期类型包括:date类型、time类型、year类型、datetime类型、timestamp类型。
date表示日期,默认格式为‘YYYY-MM-DD’;
time表示时间,格式为‘HH:ii:ss’;
year表示年份;
datetime与timestamp是日期和时间的混合类型,格式为
'YYYY-MM-DD HH:ii:ss'
datetime与timestamp都是日期和时间的混合类型,区别在于:表示的取值范围不同,datetime的取值范围远远大于timestamp的取值范围。将NULL插入timestamp字段后,该字段的值实际上是MySQL服务器当前的日期和时间。同一个timestamp类型的日期或时间,不同的时区,显示结果不同。
4.5 MySQL复合类型
MySQL支持两种复合数据类型:enum枚举类型和set集合类型。
enum类型的字段类似于单选按钮的功能,一个enum类型的数据最多可以包含65535个元素。
set类型的字段类似于复选框的功能,一个set类型的数据最多可以包含64个元素。
4.6 MySQL二进制类型
MySQL二进制类型的字段主要用于存储由‘0’和‘1’组成的字符串,因此从某种意义上将,二进制类型的数据是一种特殊格式的字符串。
MySQL二进制类型与字符串类型的区别在于:字符串类型的数据按字符为单位进行存储,因此存在多种字符集、多种字符序;而二进制类型的数据按字节为单位进行存储,仅存在二进制字符集binary。
4.7 选择合适的数据类型
选择合适的数据类型,不仅可以节省储存空间,还可以有效地提升数据的计算性能。建议:
1、在符合应用要求(取值范围、精度)的前提下,尽量使用“短”数据类型;
2、数据类型越简单越好;
3、在MySQL中,应该用内置的日期和时间数据类型,而不是用字符串来存储日期和时间;
4、尽量采用精确小数类型(例如decimal),而不采用浮点数类型。使用精确小数类型不仅能够保证数据计算更为精确,还可以节省储存空间,例如百分比使用decimal(4,2)即可;
5、尽量避免NULL字段,建议将字段指定为NOT NULL约束。