【MySQL基础学习】数据类型

缺乏、安全感 2022-12-12 02:13 305阅读 0赞

数据类型

长度类型分两种:
一 是严格限定空间,通过字节来限定长度,超出部分抛弃。比如char。
二 是使用额外的字节来标记某个地址空间的字节是否存储了数据,比如varchar。
显示宽度仅仅影响显示效果,不影响存储、比较、长度计算等等任何操作。

数值类型

在这里插入图片描述

整型

int(M) M表示总位数

  • 默认存在符号位,unsigned 属性修改
  • 显示宽度,如果某个数不够定义字段时设置的位数,则前面以0补填,zerofill 属性修改
    例:int(5) 插入一个数’123’,补填后为’00123’ 设置后会变成无符号型
  • 在满足要求的情况下,越小越好。
  • 1表示bool值真,0表示bool值假。MySQL没有布尔类型,通过整型0和1表示。常用tinyint(1)表示布尔型。

浮点型

浮点型既支持符号位 unsigned 属性,也支持显示宽度 zerofill 属性。
不同于整型,前后均会补填0.
定义浮点型时,需指定总位数和小数位数。

  1. float(M, D) double(M, D)
  2. M表示总位数,D表示小数位数。
  3. MD的大小会决定浮点数的范围。不同于整型的固定范围。
  4. M既表示总位数(不包括小数点和正负号),也表示显示宽度(所有显示符号均包括)。

支持科学计数法表示。
浮点数表示近似值。

定点型

decimal(M, D) M也表示总位数,D表示小数位数。
保存一个精确的数值,不会发生数据的改变,不同于浮点数的四舍五入。
将浮点数转换为字符串来保存,每9位数字保存为4个字节。
适用于财务数据存储,也可以将小数放大了用整型存储。

日期和时间类型

在这里插入图片描述
时间类型转换:

  1. 1.日期转时间戳
  2. select UNIX_TIMESTAMP('2018-12-25 12:25:00'); 结果:1545711900
  3. 2.时间戳转日期:
  4. FROM_UNIXTIME(unix_timestamp)--unix_timestamp为时间戳
  5. select FROM_UNIXTIME(1545711900); 结果:2018-12-25 12:25:00
  6. 3.时间戳转日期,自定义返回日期格式:
  7. FROM_UNIXTIME(unix_timestamp,format)-- format为格式
  8. select FROM_UNIXTIME(1545711900,'%Y-%m-%d %T'); 结果:2018-12-25 12:25:00

字符串类型

在这里插入图片描述

M表示能存储的最大长度,此长度是字符数,非字节数。
不同的编码,所占用的空间不同。

  • char,最多255个字符,与编码无关。
  • varchar,最多65535字符,与编码有关。一条有效记录最大不能超过65535个字节。

    • utf8 最大为21844个字符,gbk 最大为32766个字符,latin1 最大为65532个字符
    • varchar 是变长的,需要利用存储空间保存 varchar 的长度,如果数据小于255个字节,则采用一个字节来保存长度,反之需要两个字节来保存。
    • 最大有效长度是65532字节,因为在varchar存字符串时,第一个字节是空的,不存在任何数据,然后还需两个字节来存放字符串的长度,所以有效长度是64432-1-2=65532字节。

例:若一个表定义为 CREATE TABLE tb(c1 int, c2 char(30), c3 varchar(N)) charset=utf8; 问N的最大值是多少? 答:(65535-1-2-4-30*3)/3

char的空格补足

char类型是常被称为”定长字符串类型”,它严格限定空间长度,但它限定的是字符数,而非字节数,但以前老版本中限定的是字节数。因此char(M)严格存储M个字符,不足部分使用空格补齐,超出M个字符的部分直接截断。
由于char类型有”短了就使用空格补足”的能力,因此为了体现数据的真实性,在从地址空间中检索数据时将自动删除尾随的空格部分。这正是char的一个特殊性,即使是我们手动存储的尾随空格也会被认为是自动补足的,于是在检索时被删除。也就是说在where语句中name=’gaoxiaofang ‘和name=’gaoxiaofang’的结果是一样的。

特殊类型

ENUM枚举

enum(val1, val2, val3…)
在已知的值中进行单选。最大数量为65535.
枚举值在保存时,以2个字节的整型(smallint)保存。每个枚举值,按保存的位置顺序,从1开始逐一递增。
表现为字符串类型,存储却是整型。
NULL值的索引是NULL。
空字符串错误值的索引值是0。

SET集合

set(val1, val2, val3…)
create table tab ( gender set(‘男’, ‘女’, ‘无’) );
insert into tab values (‘男, 女’);
最多可以有64个不同的成员。以bigint存储,共8个字节。采取位运算的形式。
当创建表时,SET成员值的尾部空格将自动被删除。

发表评论

表情:
评论列表 (有 0 条评论,305人围观)

还没有评论,来说两句吧...

相关阅读

    相关 MySQL基础数据类型

    数据类型是什么?说白了就是数据的存储格式、约束和有效范围。 数据类型的选取,也就是指定不同数据的底层数据存储结构,直接地影响到数据库的性能。 ![292725d379667