mysql之列类型

列类型,其实指的是数据类型,主要是以下三种
在这里插入图片描述
一、数值型
又分为整数型和小数型

(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.

  1. char :定长字符串
    在定义结构的时候已经确定了最终数据的存储长度
    char(L):L 表示 Length,即可以存储的长度,单位为字符,最大长度为 255
    char(4):表示在 UTF8 环境下,存储4个汉字,需要 4
    3=12 个字节
    这种比较常用*
    –如果是确定长度的字符串,像手机号之类的,可以使用定长

  2. varchar :变长字符串
    在分配存储空间的时候,按照最大的空间分配,但是实际用了多少,则是根据具体的数据来确定。
    varchar(L):L 表示 Length,理论长度是 65536,但是会多出 1 到 2 个字节来确定存储的实际长度;
    varchar(10):例如存储 10 个汉字,在 UTF8 环境下,需要 10
    3+1=31 个字节。*
    实际上,如果存储长度超过 255 个字符,则既不用定长字符串也不用变长字符串,而是用文本字符串text.
    –如果是地址、名称等变化长度的字符串,可以使用变长

  3. text :文本字符串,存储文字
    如果数据量非常大,通常说超过 255 个字符就会使用文本字符串。

  4. blob :文本字符串,存储二进制数据
    可以用来存储二进制数据,图片数据,但是一般存储的都是地址,一般很少用

  5. enum : 枚举字符串
    枚举字符串:enum,需要事先将所有可能出现的结果都设计好,实际上存储的数据必须是规定好的数据中的一个
    –创建
    create table my_enum(
    gender enum(‘男’,‘女’,‘保密’)
    )charset utf8;
    –插入,存入多行
    insert into my_enum values (‘男’),(‘女’),(‘保密’);
    –enum存入的实际上存储的是数值,而不是字符串本身,可以验证
    – 验证枚举字段实际存储的格式
    select gender + 0,gender from my_enum;
    在这里插入图片描述

  6. 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;
    在这里插入图片描述

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值