mysql使用--数据类型

1.整型类型

类型尺寸
TINYINT1
SMALLINT2
MEDIUMINT3
INT或INTEGER4
BIGINT8

1.1.在数据类型后加上UNSIGNED构成无符号类型。
1.2.在数据类型后加上SIGNED,或什么都不加构成有符号数。

2.浮点数类型

类型尺寸
FLOAT4
DOUBLE8

3.定点数类型

引入背景是,浮点数表示小数是不精确的。某些情况下,必须保证存储的小数是精确的,此时可用定点数类型来存储小数。

类型尺寸
DECIMAL(M, D)取决于M和D

3.1.对于一个定点数形式,D规定了小数点后数字个数,M-D也就规定了整数部分数字个数最大值。比如DECIMAL(4,2)定点数只能表示[-99.99, 99.99]范围内的小数。
3.2.DECIMAL(M, D)数据存储方案细节。以DECIMAL(16, 4)为例。
3.2.1.将小数看做由小数点左边,右边两个整数组成。从小数点位置出发,将每个整数每隔9个十进制位划分为一组。这样,整数部分高3位一组,低9位一组,小数部分4位一组。
3.2.2.每组的十进制数字转换为二进制存储。十进制数字位数及所分配存储空间见表:

位数尺寸
1~21字节
3~42字节
5~63字节
7~94字节

3.2.3.将各组二进制有序拼接。将起始组二进制最高位设置为1

DECIMAL(16, 4)的实例1234567890.1234为例:

12345678901234
0x00010x0DFB3BD20x04D2

组合后,起始组二进制最高位设置为1后为0x80010DFB3BD204D2,相应的占据尺寸为8字节。

存储负数场景时,先得到关联正数存储内容,再对每个二进制位执行按位取反即可。如DECIMAL(16, 4)的实例-1234567890.1234将以0x7FFEF204C72DFB2B存储。

4.日期和时间类型

类型尺寸范围
YEAR11901~2155
DATE3‘1000-01-01’~‘9999-12-31’
TIME3‘-838:59:59’~‘838:59:59’
DATETIME8‘1000-01-01 00:00:00’~‘9999-12-31 23:59:59’
TIMESTAMP4‘1970-01-01 00:00:01’~‘2038-01-19 03:14:07’

MYSQL 5.6.4版本之后,TIME,DATETIME,TIMESTAMP支持精度最多到微妙。相应尺寸,存储方案略有调整。

TIME可以为负数,是因为它不仅可以表示一天中的某个时间,还可表示两个时间间的间隔。

我们把从0号时区的1970-01-01 00:00:00开始到现在所经历的秒数称为时间戳。用TIMESTAMP存储时间的好处是,它展示的值可随着时区的变化而变化。举例来说,我们当前在东八区,当前日期和时间'2023-11-12 19:48:10'存储到TIMESTAMP,如果将系统的时区信息调整为东九区,则看到的时间会变成'2023-11-12 20:48:10'

5.字符串类型
5.1.字符编码
字符是面向人的概念,字节是面向计算机的概念。想在计算机中表示字符,就需将该字符与一个特定的字节序列对应起来,这个映射过程叫编码。这种映射有很多种,每种即一个编码方案。按一个字符使用字节数量是否固定,编码方案可分为:
a.固定长度编码方案
b.可变长度的编码方案
MYSQL中字符集就是编码方案,常用的有UFT-8GB2312

正宗的utf-8使用1~4字节来编码一个字符,mysql中uft-8字符集一个字符最多用3字节。某些场景需使用4字节来编码字符,可使用一种叫utf8mb4的字符集,它才是正宗的utf-8字符集。

5.2.MYSQL的字符串类型
_1.CHAR(M)
M代表该类型最多可存储的字符数量。M取值范围是0~255。默认1CHAR(0)只能存储空字符串’'或NULL值。
使用该类型时,实际存储字符不足M个时,后续用空格字符填充。

_2.VARCHAR(M)
M代表该类型最多可存储的字符数量。理论上的取值范围是1~65535MYSQL规定表的一行数据(可能由多列构成)占用的存储空间总共不得超过65535字节,这时,VARCHAR(M)实际无法存储65535个字符。
VARCHAR(M)所对应的存储空间其实由下面两部分组成。
_2.1.真正的字符串内容
假设真正的字符串在指定字符集编码后占用字节数为L
_2.2.占用的字节数
假定VARCHAR(M)采用的字符集编码下一个字符至多需W个字节,则:
_2.2.1.当M*W<256时,需1字节来表示占用的字节数。此时VARCHAR(M)L+1字节。
_2.2.2.当M*W>=256时,需2字节来表示占用的字节数。此时VARCHAR(M)L+2字节。

_3.各种TEXT类型
VARCHAR(M)外,还有TINYTEXT,TEXT,MEDIUMTEXT,LONGTEXT这四种可存储可变长度的字符串类型。这些类型占用的存储空间也由实际内容和内容占用的字节长度两部分构成。
_3.1.TINYTEXT:最多可存储 2 8 − 1 2^{8}-1 281字节的字符串,内容占用的字节长度用1字节表示。
_3.2.TEXT:最多可存储 2 16 − 1 2^{16}-1 2161字节,内容占用的字节长度用2字节表示。
_3.3.MEDIUMTEXT:最多可存储 2 24 − 1 2^{24}-1 2241字节,内容占用的字节长度用3字节表示。
_3.4.LONGTEXT:最多可存储 2 32 − 1 2^{32}-1 2321字节,内容占用的字节长度用4字节表示。
前面说的表的一行数据(可能由多列构成)占用的存储空间总共不得超过65535字节,这个规定对这些TEXT类型无效。

_4.ENUM类型和SET类型
枚举类型,如ENUM('男', '女')
对于使用ENUM类型的列,该列的值只能在给定的字符串列表中选择其中的一个。
有的时候,某一列的值可以在给定的字符串列表中挑选多个。此时使用SET类型。
SET类型,如SET('str1', 'str2', 'str3')
对使用SET类型的列,该列的值可在给定的字符串列表中选择一个或多个。

综上所述,ENUMSET类型都是一种特殊的字符串类型,在从字符串列表中单选或多选元素的时候会用得到他们。

6.二进制类型
6.1.BIT类型
BIT(M),其中M的取值范围为1~64,默认为1
一个字节拥有8比特位。如果我们想存储的比特数不足整数个字节,则MYSQL会偷偷地填充满,比方说:
_1.BIT(1)只需存储1比特的数据,但MYSQL为其申请(1+7)/8=1个字节。
_2.BIT(9)2个字节。

6.2.BINARY(M)VARBINARY(M)
BINARY(M)VARBINARY(M)对应于前面提到的CHAR(M)VARCHAR(M),不过BINARYVARBINARY是用来存放字节的,其中M代表该类型最多能存放的字节数量,而CHARVARCHAR是用来存储字符的 ,其M代表该类型最多能存放的字符数量。

6.3.BLOB
TINYBLOB,BLOB,MEDIUMBLOB,LONGBLOB用于存储可变长度的二进制数据,比如图片,音频,压缩文件等。他们很像TINYTEXT,TEXT,MEDIUMTEXT,LONGTEXT,不过各种BLOB类型是用来存储字节的,而各种TEXT类型是用来存储字符的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

raindayinrain

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值