当前位置:   article > 正文

MySQL的数据类型_tinyint(10)

tinyint(10)

在这里插入图片描述

数值类型

MySQL 支持所有标准 SQL 中的数值类型,其中包括严格数值类型( INTEGER、SMALLINT、DECIMAL和NUMERIC),以及近似数值数据类型(FLOAT、REAL和DOUBLE PRECISION),并在此基础上做了扩展。扩展后增加了TINYINT、MEDIUMINT和BIGINT这3种长度不同的整型,并增加了BIT类型,用来存放位数据。下面列出了MySQL 5.0中支持的所有数值类型,其中INT是INTEGER的同名词,DEC是DECIMAL的同名词。

类型字节范围(有符号)范围(无符号)用途
TINYINT1(-128,127)(0,255)小整数值
SMALLINT2(-32 768,32 767)(0,65 535)大整数值
MEDIUMINT3(-8 388 608,8 388 607)(0,16 777 215)大整数值
INT或INTEGER4(-2 147 483 648,2 147 483 647)(0,4 294 967 295)大整数值
BIGINT8(-9,223,372,036,854,775,808,
9 223 372 036 854 775 807)
(0,18 446 744 073 709 551 615)极大整数值

1.tinyint(M)数值类型中M值的意义

对于整型数据,MySQL还支持在类型名称后面的小括号内指定显示宽度
比如int(11)和int(8),都是一样的占4字节。tinyint(1)和tinyint(10)也都占用一个字节;后面的11和8表示数据在显示时显示的最小长度;

当字符长度 >= (m)时,正常显示;
当字符长度 < (m)时,就需要指定拿某个字符来填充,比如zerofill(表示用0填充),
例如:设置tinyint(2) zerofill 你插入1时他会显示01;设置tinyint(4) zerofill 你插入1时他会显示0001;
这个M 的表示显示宽度,他跟着zerofill 一起才有意义
如果一个列指定为zerofill,则MySQL自动为该列添加UNSIGNED属性.

建表时,mysql会自动分配长度:int(11)、tinyint(4)、smallint(6)、mediumint(9)、bigint(20)。用这些默认的显示长度就可以了。不用再去自己填长度,比如搞个int(10)、tinyint(1)之类的,基本没用。而且导致表的字段类型多样化

2.整数类型还有一个属性:AUTO_INCREMENT

  • 需要产生唯一标识符或顺序值时,可利用此属性
  • 这个属性只用于整数类型
  • AUTO_INCREMENT值一般从1开始,每行增加1
  • 一个表中最多只能有一个AUTO_INCREMENT列。
  • 对于任何想要使用AUTO_INCREMENT的列,应该定义为NOT NULL,并定义为PRIMARY KEY或定义为UNIQUE键
create table AI(id int auto_increment not null primary key);
create table AI(id int auto_increment not null ,primary key(id));
create table AI(id int auto_increment not null ,unique(id));
  • 1
  • 2
  • 3

3.MySQL没有布尔类型

常用tinyint(1)表示布尔型。1表示bool值真,0表示bool值假。

在这里插入图片描述

类型字节范围(有符号)范围(无符号)用途
浮点数类型
FLOAT4(-3.402 823 466 E+38,
-1.175 494 351 E-38),
0,
(1.175 494 351 E-38,
3.402 823 466 351 E+38)
0,
(1.175 494 351 E-38,
3.402 823 466 E+38)
单精度
浮点数值
DOUBLE8(-1.797 693 134 862 315 7 E+308,
-2.225 073 858 507 201 4 E-308),
0,
(2.225 073 858 507 201 4 E-308,
1.797 693 134 862 315 7 E+308)
0,
(2.225 073 858 507 201 4 E-308,
1.797 693 134 862 315 7 E+308)
双精度
浮点数值
类型字节范围(有符号)范围(无符号)用途
定点数类型
DEC(M,D)
DECIMAL(M,D)
max(M,D)+2依赖于M和D的值依赖于M和D的值小数值

对于小数的表示,MySQL 分为两种方式:浮点数和定点数。
浮点数包括 float(单精度)和double(双精度),
而定点数则只有decimal一种表示。
定点数在MySQL内部以字符串形式存放,比浮点数更精确,适合用来表示货币等精度高的数据。

float(m,d)
decimal(m,d)
M表示该值的总共长度,D表示小数点后面的长度,M和D又称为精度和标度;
最大长度 <= m,小数位数 <= d,整数位数 <= m-d
1.小数位超过设定值,按四舍五入保存
2.小数位如果都是0,则不保存小数位

float和double在不指定精度时,默认会按照实际的精度(由实际的硬件和操作系统决定)来显示,定点数如果不写精度和标度,则按照默认值decimal(10,0)来进行操作

格式输入显示
float(5,2)1.231.23
double(5,2)1.231.23
decimal(5,2)1.231.23
float(5,2)1.2341.23
double(5,2)1.2341.23
decimal(5,2)1.2341.23
float1.2341.234
double1.2341.234
decimal1.2341
类型字节默认值范围用途
位类型
BIT(M)1~8如果不写则默认为1位BIT(1)~BIT(64)

BIT(位)类型,用于存放位字段值,BIT(M)可以用来存放多位二进制数,M范围从1~64,如果不写则默认为1位。对于位字段,直接使用SELECT命令将不会看到结果,可以用bin()(显示为二进制格式)或者hex()(显示为十六进制格式)函数进行读取。

select bin(id),hex(id) from table;
  • 1

数据插入 bit 类型字段时,首先转换为二进制,如果位数允许,将成功插入;如果位数小于实际定义的位数,则插入失败,假如插入数字2,因为它的二进制码是“10”,假如id的定义是bit(1),所以将无法进行插入:
在这里插入图片描述

日期和时间类型

类型字节范围格式用途
TIMESTAMP41970-01-01 00:00:00 / 2038

结束时间是第 2147483647 秒,
北京时间 2038-1-19 11:14:07
格林尼治时间 2038-1-19 03:14:07
YYYYMMDD HHMMSS插入或更新日期
为当前系统日期
DATETIME81000-01-01 00:00:00/9999-12-31 23:59:59YYYY-MM-DD HH:MM:SS表示年月日时分秒
DATE31000-01-01 / 9999-12-31YYYY-MM-DD表示年月日
TIME3‘-838:59:59’ / ‘838:59:59’HH:MM:SS表示时分秒
YEAR11901 / 2155YYYY表示年份

每种日期时间类型都有一个有效值范围,如果超出这个范围,在默认的SQLMode下,系统会进行错误提示,并将以零值来进行存储。不同日期类型零值即格式不变值全为0;

  • TIMESTAMP支持的时间范围较小,其取值范围从19700101080001到2038年的某个时间,而DATETIME是从 1000-01-01 00:00:00到 9999-12-31 23:59:59,范围更大。
  • 如果在一个TIMESTAMP列中插入 NULL ,则该列值将自动设置为当前的日期和时间;
  • 在插入或更新一行但不明确给TIMESTAMP列赋值时也会自动设置该列的值为当前的日期和时间;
  • 当插入的值超出取值范围时,MySQL认为该值溢出,使用“0000-00-00 00:00:00”进行填补。
  • TIMESTAMP 的插入和查询都受当地时区的影响,更能反映出实际的日期。而DATETIME则只能反映出插入时当地的时区,其他时区的人查看数据必然会有误差的。
  • 任何标点符都可以用做日期部分或时间部分之间的间隔符。例如,“98-12-31 11:30:45”、“98.12.31 11+30+45”、“98/12/31 113045”和“98@12@31 113045”是等价的。
  • 如果日和月的值小于 10 ,不需要指定两位数。“1979-6-9”与“1979-06-09”是相同的。同样,对于包括时间部分间隔符的字符串值,如果时、分和秒的值小于 10,不需要指定两位数。“1979-10-30 1:2:3”与“1979-10-30 01:02:03”相同。
    在这里插入图片描述

字符串类型

类型字节描述存储要求用途
CHAR(M)
字符字符串
MM 为 0-255 间整数
M 代表字符的个数
定长字符串速度快,但浪费空间
长度的限制是0-255个字符。与编码无关,即没有出字节的限制数
VARCHAR(M)
字节字符串
M 为 0-65535 间整数
M 代表字符的个数
varchar 是变长的,需要利用存储空间保存 varchar 的长度,如果数据小于255个字节,则采用一个字节来保存长度,反之需要两个字节来保存。变长字符串速度慢,但节省空间
与编码有关
一条有效记录最大不能超过65535个字节。
utf8 最大为21844个字符
gbk 最大为32766个字符
latin1 最大为65532个字符
varchar 最大有效长度是65532字节,因为在varchar存字符串时,第一个字节是空的,不存在任何数据,然后还需两个字节来存放字符串的长度,所以有效长度是65535-1-2=65532字节。
例:若一个表定义为
CREATE TABLE tb(c1 int, c2 char(30), c3 varchar(N)) charset=utf8;
问N的最大值是多少? 答:(65535-1-2-4-30*3)/3
BINARY(M)M允许长度0-M bytes的定长字节字符串定长二进制字符串
VARBINARY(M)允许长度0-M bytes的变长字节字符串值的长度+1byte变长二进制字符串
TINYBLOB允许长度长度0-255 bytes值的长度+1byte不超过255个字符的二进制字符串
BLOB允许长度0-65 535 bytes值的长度+2bytes二进制形式的长文本数据
MEDIUMBLOB允许长度0-16 777 215 bytes值的长度+3bytes二进制形式的中等长度文本数据
LONGBLOB允许长度0-4 294 967 295 bytes值的长度+4bytes二进制形式的极大文本数据
TINYTEXT允许长度0-255 bytes值的长度+2bytes短文本字符串
TEXT允许长度0-65 535 bytes值的长度+2bytes长文本数据text 在定义时,不需要定义长度,也不会计算总长度。
text 类型在定义时,不可给default值
MEDIUMTEXT允许长度0-16 777 215 bytes值的长度+3bytes中等长度文本数据
LONGTEXT允许长度0-4 294 967 295 bytes值的长度+4bytes极大文本数据

枚举类型

ENUM中文名称叫枚举类型,它的值范围需要在创建表时通过枚举方式显式指定;

  • 对1~255个成员的枚举需要1个字节存储;对于255~65535个成员,需要2个字节存储。最多允许有65535个成员。
  • 枚举值在保存时,以2个字节的整型(smallint)保存。每个枚举值,按保存的位置顺序,从1开始逐一递增。
  • 表现为字符串类型,存储却是整型。
  • NULL值的索引是NULL。
  • 空字符串错误值的索引值是0。
create table t (gender enum('M','F'));

INSERT INTO t VALUES('M'),('1'),('f'),(NULL);

select * from t;

M M F NULL
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 出ENUM类型是忽略大小写的,在存储“M”、“f”时将它们都转成了大写
  • 插入不在 ENUM 指定范围内的值时,并没有返回警告,而是插入了enum(‘M’,‘F’)的第一个值“M”,这点在使用时要特别注意。
  • ENUM类型只允许从值集合中选取单个值,而不能一次取多个值。
    在这里插入图片描述

SET类型

SET和ENUM类型非常类似,也是一个字符串对象,里面可以包含0~64个成员。

  • 根据成员的不同,存储上也有所不同。
    1~8成员的集合,占1个字节。
    9~16成员的集合,占2个字节。
    17~24成员的集合,占3个字节。
    25~32成员的集合,占4个字节。
    33~64成员的集合,占8个字节。
  • SET 和 ENUM 除了存储之外,最主要的区别在于 SET 类型一次可以选取多个成员,而ENUM则只能选一个。
  • 以bigint存储,共8个字节。采取位运算的形式。
  • 当创建表时,SET成员值的尾部空格将自动被删除。
Create table t (col set'a','b','c','d';

insert into t values('a,b'),('a,d,a'),('a,b'),('a,c'),('a');

select * from t;

| a,b |
| a,d |
| a,b |
| a,c |
| a |
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • SET类型可以从允许值集合中选择任意1个或多个元素进行组合,所以对于输入的值只要是在允许值的组合范围内,都可以正确地注入到SET类型的列中。
  • 对于超出允许值范围的值例如('a,d,f ')将不允许注入到上面例子中设置的SET类型列中,
  • 对于(‘a,d,a’)这样包含重复成员的集合将只取一次,写入后的结果为“a,d”,这一点请注意。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/天景科技苑/article/detail/904477
推荐阅读
相关标签
  

闽ICP备14008679号