列类型,其实指的是数据类型,主要是以下三种
一、数值型
又分为整数型和小数型
(1)整数型
tinyint:迷你整型,使用 1 个字节存储数据(常用);
smallint:小整型,使用 2 个字节存储数据;
mediumint:中整型,使用 3 个字节存储数据;
int:标准整型,使用 4 个字节存储数据(常用);
bigint:大整型,使用 8 个字节存储数据。
字节数分别是1、2、3、4,然后一个4的两倍8
(2)小数型
小数型又分为浮点型和定点型
- 浮点型:小数点浮动,精度有限,容易丢失精度;
- 定点型:小数点固定,精度固定,不会丢失精度。
A.浮点型
- float:单精度,占用 4 个字节存储数据,精度范围大概为 7 位左右;
- double:双精度,占用 8 个字节存储数据,精度范围大概为 15 位左右。
B.定点型
- decimal 保证整数部分不会丢失精度,理论上小数部分也不会丢失精度
create table my_decimal(
f1 float(10,2),--总长10位,保留两位小数
d1 decimal(10,2)
)charset utf8;
-- 插入测试数据
insert into my_decimal values (99999999.99,99999999.99);
insert into my_decimal values (123456789.99,2015.1314);
insert into my_decimal values (123456.99,2015.1314);
中间一个超过范围没有添加上,第一个和第三个可以看到float是精度丢失的,但是decimal是没有精度丢失的
二、日期时间型
- datetime:日期时间,其格式为yyyy-MM-dd HH:mm:ss,表示的范围是从 1000 年到 9999 年,有零值,即0000-00-00 0000:00;
- date:日期,就是datetime的date部分;
- time:时间,或者说是时间段,为指定的某个时间区间之间,包含正负时间;
- timestamp:时间戳,但并不是真正意义上的时间戳,其是从1970年开始计算的,格式和datetime一致;时间戳类型默认是非空的
- year:年份,共有两种格式,分别为year(2)和year(4).
创建和插入:
-- 创建日期时间表
create table my_date(
d1 datetime,
d2 date,
d3 time,
d4 timestamp,--这个并不是真正意义的事件戳,和datetime格式是一致的
d5 year
)charset utf8;
-- 插入测试数据
insert into my_date values (
'2017-05-06 13:15:00',
'2017-05-06',
'13:15:00',
'2017-05-06 13:15:00',2017);
三、字符串类型
在 SQL 中,将字符串类型分成了 6 类,
分别为:char、varchar、text、blob、enum和set.
-
char :定长字符串
在定义结构的时候已经确定了最终数据的存储长度
char(L):L 表示 Length,即可以存储的长度,单位为字符,最大长度为 255
char(4):表示在 UTF8 环境下,存储4个汉字,需要 43=12 个字节
这种比较常用*
–如果是确定长度的字符串,像手机号之类的,可以使用定长 -
varchar :变长字符串
在分配存储空间的时候,按照最大的空间分配,但是实际用了多少,则是根据具体的数据来确定。
varchar(L):L 表示 Length,理论长度是 65536,但是会多出 1 到 2 个字节来确定存储的实际长度;
varchar(10):例如存储 10 个汉字,在 UTF8 环境下,需要 103+1=31 个字节。*
实际上,如果存储长度超过 255 个字符,则既不用定长字符串也不用变长字符串,而是用文本字符串text.
–如果是地址、名称等变化长度的字符串,可以使用变长 -
text :文本字符串,存储文字
如果数据量非常大,通常说超过 255 个字符就会使用文本字符串。 -
blob :文本字符串,存储二进制数据
可以用来存储二进制数据,图片数据,但是一般存储的都是地址,一般很少用 -
enum : 枚举字符串
枚举字符串:enum,需要事先将所有可能出现的结果都设计好,实际上存储的数据必须是规定好的数据中的一个。
–创建
create table my_enum(
gender enum(‘男’,‘女’,‘保密’)
)charset utf8;
–插入,存入多行
insert into my_enum values (‘男’),(‘女’),(‘保密’);
–enum存入的实际上存储的是数值,而不是字符串本身,可以验证
– 验证枚举字段实际存储的格式
select gender + 0,gender from my_enum;
-
set :列表字符串
集合字符串:set,跟枚举类似,实际存储的是数值而不是字符串。
可以使用元素列表中的多个元素,用逗号分隔。
– 创建集合表
create table my_set(
hobby set(‘音乐’,‘电影’,‘旅行’,‘美食’,‘摄影’,‘运动’,‘宠物’)
)charset utf8;
– 插入测试数据
insert into my_set values (‘电影,美食,宠物’);
insert into my_set values (3); –二进制就是11,前两项选中为1
– 查看数据
select hobby + 0,hobby from my_set;