共分为三大类型:数值型,字符串型和日期时间型。
对于数值型数据,可以进一步将其划分为整数型和小数型。
一 。整数型:
在 SQL 中,整型细分成五类,分别为:
tinyint:迷你整型,使用 1 个字节存储数据(常用);
smallint:小整型,使用 2 个字节存储据;
mediumint:中整型,使用 3 个字节存储数据;
int:标准整型,使用 4 个字节存储数据(常用);
bigint:大整型,使用 8 个字节存储数据。
小数型,即带有小数点或者范围超出整型的数值类型。
二 。小数型:
细分为浮点型和定点型两种
浮点型:小数点浮动,精度有限,容易丢失精度;
定点型:小数点固定,精度固定,不会丢失精度。
第 1 种:浮点型
浮点型数据是一种精度型数据,因为超出指定范围之后,其会丢失精度,自动进行四舍五入操 作。浮点型分为两种精度:
float:单精度,占用 4 个字节存储数据,精度范围大概为 7 位左右;
double:双精度,占用 8 个字节存储数据,精度范围大概为 15 位左右。
浮点型的使用方式:如果直接用float,则表示没有小数部分;如果用float(M,D),其中M代表总长 度,D代表小数部分长度,M-D则为整数部分长度。
扩充:
在咱们向浮点数表my_float插入数据的时候,可以直接插入小数,也可以插入用科学计数法表示 的数据。此外,插入浮点型数据时,整数部分是不能超出长度范围的,但是小数部分是可以超出长度范围的,系统会自动进行四舍五入的操作。特别是,如果浮点数是因为系统进位(四舍五入)导致整数部分超出指定的长度,那么系统是允许成立的。
第 2 种:定点型
定点型数据,绝对的保证整数部分不会被四舍五入,也就是说不会丢失精度,但小数部分有可能丢失精度,虽然理论上小数部分也不会丢失精度。
扩展:
当咱们插入数据的时候,定点数的整数部分一定不能超出长度范围(进位也不可以),小数部分的长度则可以随意超出,没有限制,系统会自动进行四舍五入的操作:
字符串:
类型分成了 6 类,分别为:char、varchar、text、blob、enum和set.
第 1 类:定长字符串
定长字符串:char,即磁盘(二维表)在定义结构的时候就已经确定了最终数据的存储长度。
char(L):L 表示 Length,即可以存储的长度,单位为字符,最大长度为 255;
char(4):表示在 UTF8 环境下,需要 4*3=12 个字节。
第 2 类:变长字符串
变长字符串:varchar,即在分配存储空间的时候,按照最大的空间分配,但是实际用了多少,则是根据具体的数据来确定。
varchar(L):L 表示 Length,理论长度是 65536,但是会多出 1 到 2 个字节来确定存储的实际长度;
varchar(10):例如存储 10 个汉字,在 UTF8 环境下,需要 10*3+1=31 个字节。
实际上,如果存储长度超过 255 个字符,则既不用定长字符串也不用变长字符串,而是用文本字符串text.
如何选择定长字符串或者是变长字符串呢?
定长字符串对磁盘空间比较浪费,但是效率高:如果数据基本上确定长度都一样,就使用定长字符串,例如身份证、电话号码等;
变长字符串对磁盘空间比较节省,但是效率低:如果数据不能确定长度(不同的数据有变化),就使用变长字符串,例如地址、姓名等。
第 3 类:文本字符串
如果数据量非常大,通常说超过 255 个字符就会使用文本字符串。
文本字符串根据存储的格式进行分类,可以分为:
text:存储文字;
blob:存储二进制数据(其实际上都是存储路径),通常不用。
第 4 类:枚举字符串
枚举字符串:enum,需要事先将所有可能出现的结果都设计好,实际上存储的数据必须是规定好的数据中的一个。
枚举字符串的使用方式:
定义:enum('元素1','元素2','元素3'...),例如enum('男','女','保密');
使用:存储的数据,只能是事先定义好的数据。
日期时间型:
共有五种类型,分别为:
datetime:日期时间,其格式为yyyy-MM-dd HH:mm:ss,表示的范围是从 1000 年到 9999 年,有零值,即0000-00-000000:00;
date:日期,就是datetime的date部分;
time:时间,或者说是时间段,为指定的某个时间区间之间,包含正负时间;
timestamp:时间戳,但并不是真正意义上的时间戳,其是从1970年开始计算的,格式和datetime一致