mysql中的数据类型

1、 int类型:整形(整数类型)

整数类型字节最小值最大值
tinyint1有符号:-128
无符号:0
有符号:127
无符号:255
smallint2有符号:-32768
无符号:0
有符号:32767
无符号:65535
mediumint3有符号:-8388608
无符号:0
有符号:8388607
无符号:1677215
int、integer4有符号:-2147483648
无符号:0
有符号:2147483647
无符号:4294967295
bigint8有符号:-9223372036854775808
无符号:0
有符号:9223372036854775807
无符号:18446744073709551615
  • tinyint:1个字节,8位二进制

  • 有符号:signed,最高位当做符号位,最高位为1,表示一个负数,10000000~01111111,即-128—127

  • 无符号:unsigned,最高位当做数字使用,00000000~11111111,0—255

  • 在 MySQL 中,INT 类型是一个有符号整数类型,通常用于存储 -2,147,483,648 到 2,147,483,647 之间的整数(在大多数平台上,INT 占用 4 个字节,即 32 位)。但是,你提到的 -128 是一个较小的整数,它同样可以用 INT 类型来存储。

    在二进制表示中,-128 可以表示为一个 8 位(1 字节)的补码形式。在补码表示法中,一个负数是通过取其正数的二进制表示,然后进行按位取反(即 0 变 1,1 变 0),最后加 1 来得到的。

    对于 128(二进制为 10000000),按位取反后得到 01111111,然后加 1 得到 10000000。因此,-128 在 8 位二进制补码表示法中是 10000000。

    如果你需要在 MySQL 中存储 -128 这个值,它会以 8 位二进制的形式存储,但是实际上在数据库中,INT 类型会使用 32 位来存储这个值。在 32 位中,-128 的补码表示如下:

    11111111 11111111 11111111 10000000
    

    这是因为最高位(符号位)是 1,表示这是一个负数,其余的位是 -128 的 8 位表示的扩展。在补码系统中,最高位的 1 被用来表示负数,其余的位则表示数值本身。

  • 创建一个无符号位的int类型

    create table <表名>(字段名 tinyint unsigned);
    
  • 显示宽度(zerofill),整型显示宽度,位数不足时用0填充

    create table <表名>(id int(10) zerofill primary key auto_increment);
    

2、 浮点数

浮点数类型字节最小值最大值
float4±1.175494351E-38±3.402823466E+38
double8±2.2250738585072014E-308±1.7976931348623157E+308
定点整数型字节描述
dec(M,D),decimal(M,D)M+2最大取值范围与double相同,给点decimal的有效取值范围有M和D决定
位类型字节最小值最大值
bit(M,D)1~8bit(1)bit(64)
  • 定点数的位数更长,使用方式为:

    —float(M,D)

    —double(M,D)

    —decimal(M,D)

    —M是支持多少个长度,D是小数点后的位数

    create table <表名>(
    	a float(10,2),
    	b double(10,2),
    	c decimal(10,2)
    	);
    

3、字符串类型

字符串类型字节描述及存储要求
char(M)MM为0~255之间的整数
varchar(M)M为0~65535之间的整数,值的长度+1个字节
tinyblob允许长度0~255字节,值的长度+1个字节
blob允许长度为0~65535字节,值的长度+2个字节
mediumblob允许长度0~16772150字节,值的长度+3个字节
longblob允许长度0~4294967295字节,值的长度+4个字节
tinytext允许长度0~255字节,值的长度+2个字节
text允许长度为0~65535字节,值的长度+2个字节
mediumtext允许长度0~16772150字节,值的长度+3个字节
longtext允许长度0~4294967295字节,值的长度+4个字节
varbinary(M)允许长度0~M个字节的变长字节字符串,值的长度+1个字节
binary(M)M允许长度0~M个字节的定长字节字符串
  • char 与 varchar 的区别
TypeInputSaved in DBSizeDesc
char(5)“a”"a "5 bytes固定占5个字节,不足的用空格补齐
varchar(5)“a”“a”2 bytes字符占1个字节,额外用占1个字节记录位长
char(5)"abc ""abc "5 bytes保留abc后的空格,依然是5个字节
varchar(5)"abc "“abc”4 bytes删除结尾空格,再加上一个位长记录字节,共4个字节
char(5)“abcdefg”“abcde”5 bytes报错
varchar(5)“abcdefg”“abcde”6 bytes报错
  • 如何选择字符串、浮点型数据的大小

    根据要保存的数据的大小来确定,更大类型的数据会造成数据臃肿,存储空间占用过大,数据检索也会变慢

4、枚举类型(enum)

  • 多选一的时候常使用的一种数据类型,如前端使用单选框的时候,其优点有:

—限制了可选值

—节省空间

—运行效率高

  • 使用方法:
create table <表名>(
	name varchar(8),
	gender enum('男','女','保密') default '保密'
	)

—枚举类型的计数默认从1开始

  1. 集合类型(set)
  • set最多有64个不同的成员,类似复选框,有多少就能选多少
create table <表名>(
	name varchar(32),
	hobby set('吃','喝','玩','唱','跳')
	);
	
insert into <表名> values('A先生','吃,唱,跳');
insert into <表名> values('B女士','吃,喝');
  1. 时间类型
日期和时间类型字节最小值最大值
date41000-01-019999-12-31
datetime81000-01-01 00:00:009999-12-31 23:59:59
timestamp4197001010800012038年的某个时刻
time3-838:59:59838:59:59
year119012155
  • datetime
create table datetime_demo (
	create_at datetime
	);
	
insert into datetime_demo values('2024-09-08 09:33:00');
insert into datetime_demo values('2024/09/08 09:33:00');
insert into datetime_demo values(now());
---年份最大支持4个长度
insert into datetime_demo value('10000/09/08 09:35:00'); ---报错
insert into datetime_demo values('9999/09/08 09:35:00');
  • time

—时间戳类型在显示时和datetime是一样的,在存储上不同

—范围从1970-1-1 0:0:0 到2038-1-19 11:14:07

—时间戳使用4个字节表示

该值大小与存储的位长的关系为:2**(4*8-1)

create table timestamp_demo(
	create_time timestamp
	);
	
insert into timestamp_demo values(now());
insert into timestamp_demo values('2038-1-19 11:14:07'); ---时间戳最大值
insert into timestamp_demo values(2038-1-19 11:14:08); ---错误
  • 布尔类型

—mysql中的bool类型也是0和1

create table 'bool'(
	cond boolean
	);
	
insert into 'bool' set cond=True;
insert into 'bool' set cond=False;
insert into 'bool' set cond=1;
insert into 'bool' set cond=10;
insert into 'bool' set cond=-1;
insert into 'bool' set cond=0;
insert into 'bool' set cond=0.1;
insert into 'bool' set cond=127;
insert into 'bool' set cond=128; ---报错
insert into 'bool' set cond='True'; ---报错

—bool类型在存储的时候是tinyint类型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值