MySQL-数据类型

1.3.2 数据类型
1.3.2.1 数值类型(整数,小数)
整数型关键字所占字节数
最小的整型TinyInt(1字节)
较小的整型SmallInt(2字节)
中等的整型MediumInt(3字节)
整型Int(4字节)
较大的整型BigInt(8字节)

特点

1. int(11)中“11”是指字符的显示宽度,与 int 最大值和最小值范围无关。

2. 在创建 int 类型的数据时,默认的是有符号数。如果需要创建无符号的值,使用 unsigned 来进行定义。

3. 当插入的值 大于最大值 小于最小值时,系统会报下面的错误:“ Out of range value for column ‘a’ at row 1”(第1行“a”列的值超出了范围)

补充:zerofill为补零关键字。

小数型

浮点型关键字
单精度浮点型(4字节)float (M,D)
双精度浮点型(8字节)double (M,D)

M(精度):表示总共的位数。

D(标度):是指小数点后的个数。

单精度和双精度浮点型可进行四舍五入。

定点型关键字
定点型(M+2字节)decimal (M,D)

Decimal:M的默认值为10,D的默认值为0.精度更高

1.3.2.2 字符串类型

定长字符型:char(可省略,默认为1),存储的所有字符都是4字节。

变长字符型:varchar(不可省略),存储的字符=字符数+1。

非二进制字符串:text。用于保存评论,文章等。

enum枚举型:enum类型的字段在取值的时候,只能取enum中的一个值。

     //创建一个枚举实例 
      create table tab_en(
        	name enum('a','b','c','d')
        );
    //插入数据
       insert into tab_en values('a'); 
       insert into tab_en values('b'); 
       insert into tab_en values('c'); 
       insert into tab_en values('d'); 
      //当插入的数据,枚举类型中没有 e 的时候,会报错
       insert into tab_en values('e');

在这里插入图片描述

从上图的错误提示“ Data truncated for column ‘name’ at row 1:第1行“name”列的数据被截断”。可以知道,如果插入的数据不在枚举数据中,是会报错。

set集合型:SET 是一个字符串的对象,可以有零或多个值,SET 列最多可以有 64 个成员,值为表创建时规定的一列值的集合。set类型的字段在取值的时候,可以获取多个值(获取的值必须提前定义过)。

       //创建一个set集合实例
       create table tab_s(
        	name set('a','b','c','d','e','f')
        );

        insert into tab_s values('a');
        insert into tab_s values('a,b');
        insert into tab_s values('a,g');	//会报错,在set集合中没有“g”
1.3.2.3 时间日期类型

1. datetime:用于显示年月日,时分秒。

2. timestamp(时间戳):根据当前时区的不同,显示的时间值是不同的。

​ 特点1:timestamp 显示的时间信息,受时区的影响,一个单位的时区之间相差一个小时。

​ 特点2:timestamp 还受MySQL的版本影响。

DateTime与TimeStamp的使用和比较
    //创建一个tab_time的表,t1:datetime  t2:timestamp
        create table tab_time(
            t1 datetime,
            t2 timestamp
        );

    //插入数据,now()表示显示当前时间
        insert into tab_time values (now() , now());

    //查询当前的时间信息
        select * from tab_time;

在这里插入图片描述

    //显示系统 当前的 时区 信息
     	show variables like '%time_zone%';

在这里插入图片描述

	//修改当前的 时区 信息,将时区修改为+8.00
		set time_zone = '+8:00';

在这里插入图片描述

		//查看修改后时区的显示时间,(因为修改了时区的信息,所以新的时区时间和datetime的时间相差1个小时)
			select * from tabl_time;

在这里插入图片描述

year ,date ,time 的使用

在这里插入图片描述

1.3.2.4 二进制类型

blob 是一个二进制的对象,用来存储可变数量的数据。

blob列存储的是二进制字符串(字节字符串),text 列存储的是非二进制字符串(字符字符串)。blob 列是字符集,并且排序和比较基于列值字节的数值;text 列有一个字符集,并且根据字符集对值进行排序和比较。

特点:blob主要存储图片,音频视频等。text主要存储纯文本文件。

1.3.2.5 关于各个数据类型之间的比较
char和varchar比较
  • char:存取的速度比较快。char为固定的长度存储,直接将数据放入划分好的存储区域即可。
  • varchar:节省空间。varchar在存储的时候,会根据存储字符的长度进行划分存储大小,所以比较费时间,但是可以很好的利用存储的空间。
char,varchar与存储引擎
  1. 对于MyISAM存储引擎,选择char类型比较好。最好使用固定长度的数据列代替可变长度的数据列。这样可以使整个表静态化,从而使数据检索更快,用空间换时间。
  2. 对于Innodb存储引擎,选择varchar类型比较好。最好使用可变长度的数据列,因为 InnoDB 数据表的存储格式不分固定长度和可变长度,因此使用 CHAR 不一定比使用 VARCHAR 更好,但由于 VARCHAR 是按照实际的长度存储,比较节省空间,所以对磁盘 I/O 和数据存储总量比较好。
enum枚举和set集合的对比
  • enum:==只能取单值。==enum枚举类型中可以存储多个值,但是在插入数据的时候,只能在这些存储的多个值中取一个。(当没有指定enum为 not null 时,可以插入null)例如:存储人的性别字段时,可以使用enum。
  • set:==可以取多值。==set是一个集合,可以存储多个值,在插入数据的时候可以插入多个值(但是这些值必须为集合中的值)。例如:存储一个人的兴趣爱好可以使用set。

特点:虽然enum和set在显示的时候是以字符形式,但是在MySQL的内部他们是以数值形式进行存储的。所以这两种数据类型在获取的时候以字符和数值都可以取值。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值