Mysql基础(13)mysql数据类型

在mysql中数据大致可以分为

  • 数值型。包括整型、小数(定点数、浮点数)
  • 字符型。较短的字符(char、vchar)、较长的文本(text、blob)
  • 日期

整数(5种)

mysql中整型分为以下五种

类型tinyintsmallintmediumintint/integerbigint
所占字节数(一个字节八位)12348
  • 无符号和有符号

    以上五种整型都可分为无符号和有符号,无符号整型的所有位数都用于表示数值,其数值范围>=0。

    有符号整型符号占一位,其数值有正负。

    默认情况下,mysql的整型为有符号整型,即数值有正负。可使用unsigned关键字设置无符号整型.

    CREATE TABLE type1(
    	t1 INT,   //默认有符号
        t2 int unsigned  //显式声明无符号
    )
    
  • 取值范围

    五种整型各占的字节数限制了对应的取值范围。若插入的数值超过定义的范围,会报out of range警告,但依旧执行插入操作,且插入临界值。

    #定义表
    CREATE TABLE type1(
    	t1 TINYINT  //有符号,范围-128-127
    )
    #插入数据超出范围
    INSERT INTO type1 (t1) VALUE(-1288) //超出范围,应该是插入-128.实验未插入任何值。
    
  • 显示宽度

    在定义表结构时,可自定义列的显示宽度,不足宽度部分在左侧填充0。每个类型都有默认的宽度,且默认不会把填充的0显示出来,可使用zerofill关键声明显示0。

    注意该特点只对正整数有效,即无符号整型。

    CREATE TABLE type2(
    	t1 TINYINT(10) ZEROFILL,   //设置显示宽度为10,填充后显示
    	t2 TINYINT(5)//设置显示宽度为5 ,填充后不显示
        t3 TINYINT               //默认显示宽度为54,填充后不显示
    )
    
    INSERT INTO type2 (t1,t2,t3) VALUE(124,124,124)
    SELECT * FROM type2
    #输出结果
    |        t1| t2| t3|
    |0000000124|124|124|
    

小数(3种)

小数可以分为浮点型和定点型。其中浮点型包括

  • float(M,D):占4个字节

  • double(M,D):占8个字节

定点型包括以下两种,字节长度为M+2。

  • dec(M,D)
  • decimal(M,D)

在浮点型和定点型中,M表示数值的总宽度(包含D的宽度),D表示小数点的位数。若超过范围,则插入临界值。

若M、D缺省,mysql会默认定点型的(M,D)为(10,0);默认浮点型根据插入数值的精度自适应决定精度。

在定义列类型时,一般选用满足业务需求的最简单类型。对于精度要求高的场景,比如货币计算等,可使用定点型小数。

字符型

字符型根据长度可分为

较短的文本

类型语法M含义特点空间耗费性能使用场景
固定字符char(M)最大的字符数,可缺省,默认1固定长度的字符串定义之后即固定,不会伸缩。空间耗费高字段长度确定,例如性别
可变长字符varchar(M)最大的字符数,不可缺省字符串的实际长度会自动伸缩需要多少提供多少,空间利用率高低字符长度不确定

较长的字符

  • text
  • blob:存储较大的二进制

枚举类型

在定义字段时,给列设定值范围。当插入值时,只能插入范围内的某一个值。否则报错。

查询时该列是一个单选下拉框

create table test_enum(
	grade enum('a','b','c')  //表示grade列只能从三个字符中选一个插入,插入其他值报错。
)

set类型

set作用类似枚举类型,不同的是,set类型可以插入取值范围内的多个值。

查询时该列是一个多选下拉框

create table test_set(
	grade set('a','b','c')  //表示grade列只能从三个字符中任选多个插入,插入其他值报错。
)
insert into test_set values('a,b')

日期型

类型所占字节最小值最大值特点
date41000-01-019999-12-31只保存日期
time3-838:59:59838:59:59只保存时间
year119012155只保存年份
datetime81000-01-01 00:00:009999-12-31 23:59:59格式化、易读的日期+ 时间
timestamp41970-01010800012038年某个时刻未格式化的日期+时间

timestamp比datetime支持的时间范围小,且timestamp受实际时区、mysql版本、sqlmode影响,更接近真实业务时间、常用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值