SQL中将数据分为三大类:数值类型,字符串类型,时间日期格式类型,其中每种类型下还有细分好几种类型
SQL中数值类型全部都是默认有符号,也就是有正数和负数区分
(1)整数型
在sql中需要考虑磁盘的存储空间,所以将整数型细分以下五种。
1)tinyint: 迷你整形,使用一个字节存储,表示的状态最多256种
2)smallint: 小整形,使用2个字节存储,表示的状态最多为65536种
3)mediumint: 中整形,使用3个字节存储。
4)int: 标准整形,使用4个字节存储
5)bigint: 大整形,使用8个字节存储。
上面五种,最常用的就是tinyint和int这两种,最多再加上bigint这种。
上图中'type'一列表示的是所占宽度。
(2)小数型(包括浮点型和定点型)
浮点型的特点是小数点浮动,有精度丢失;定点型特点就是小数点固定,不会丢失精度。浮点型又分float和double,float占用4个字节存储数据,精度范围大概为7位左右;double占用8个字节存储数据,精确范围大概为15位左右。
浮点型:创建浮点数表:直接float表示没有小数部分;float(M,D) 其中M表示总长度,D表示小数部分长度,所以整数部分长度为M-D;
定点型:定点型是绝对保证整数部分精度不丢失,小数部分理论上也不会丢失精度。
(3)数据类型-时期时间
时间日期类型分类
Datetime: 时间日期,格式是YYYY-mm-ddHH:ii:ss,表示的范围是从1000到9999年,有0值,也就是有0000-00-00 00:00:00
Date: 日期,就是datetime中的date部分
Time: 时间段,指定的某个区间之间。
Timestamp:字面是时间戳,但并不是时间戳,只是从1970年开始的YYYY-mm-ddHH:ii:ss,格式与datetime完全一致。
Year: 年份 有两种形式:year(2)和year(4)
每种类型格式和取值范围如下表
(4)字符串数据类型
定长字符串:char,磁盘上二维表在定义结构的时候,就已经确定了最终数据的存储长度。
char(L): L代表length,可以存储的长度,单位为字符,最大长度值可以为255.
char(4): 在UTF8环境下,需要4*3=12个字节(utf8默认3个字节存储一个字符)
变长字符串:varchar, 在分配空间的时候,按照最大的空间分配,但是实际上最终用了多少是根据具体的数据来确定。varchar(L): L表示字符长度,理论长度是65536个字符,但是会多出一到2个字节来确定存储的实际长度。
如何选择定长或者是变长字符串?
定长的磁盘空间比较浪费,但是效率高;
变长的磁盘空间比较节省,但是效率低;
如果数据基本上确定长度都一样,那么建议使用定长,例如身份证,电话号码,手机号码。
如果数据不能确定长度(不同数据有变化),建议使用变长,例如姓名,地址。
文本字符串
上面提到char最大长度是255个,如果数据量非常大,通常说超过255个字符就会使用文本字符串。文本字符串根据存储的数据的格式分成text和blob两类。
text: 存储文字(二进制数据实际上都是存储路径)
blob: 存储二进制数据(通常不用)
枚举
Enum:事先将所有可能出现的结果都设计好,实际上存储的数据数据必须是规定好的数据中的一个。
枚举的使用方式
定义:enum(可能出现的元素列表);例如 enum(‘男’, ‘女’, ‘保密’)
其实在enum中还可以插入数字型数据,这是为什么?
枚举原理:枚举在进行定义的时候,系统会自动建立一个数字与枚举元素的对应关系,然后在进行数据插入,系统自动将字符转换成对应的数字存储,然后在进行数据提取的时候,系统自动将数值转换成对应的字符串显示。
集合字符串
集合跟枚举类似,实际存储的也是数值,而不是字符串(集合是多选),集合的使用方式如下:
定义: set(元素列表)
使用:可以使用元素列表中的元素(一个或者多个),用逗号分隔。
集合中实际也是采用数字来存储的,本篇关于字符串的数据类型就介绍到这里