一、常见的数据类型

  数值型:
    整型
    小数:定点数、浮点数
  字符型
    短文本:char、varchar
    长文本:text、blob(较长的二进制数据)
  日期型

二、整型

类型字节范围(有符号)范围(无符号)
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)

特点:

  ①如果不设置无符号还是有符号,默认是有符号,如果想设置无符号,需要添加 unsigned 关键字。
  ②如果插入的数值超过了整型的范围,会报 out of range 异常。
  ③如果不设置长度,会有默认的长度,长度代表了显示的最大宽度,如果不够会用 0 在左边填充,但必须搭配 zerofill 使用。
  ④ zerofill 是个格式化数值类型的约束,当数值的长度小于设置的数值长度时,zerofill 会用 0 填充。

例如:

create TABLE zyx(
	-- int类型
	a int ,
	-- int类型且无符号
	b int UNSIGNED,
	-- int类型无符号,如果长度小于8用0填充
	c int(8) UNSIGNED ZEROFILL
);

三、小数

定点数

类型字节范围(有符号)范围(无符号)
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)

浮点数

类型字节范围(有符号)范围(无符号)
decimal 或 dec对 DECIMAL(M,D) ,如果 M>D,为 M+2 否则为 D+2依赖于 M 和 D 的值,最大范围和 double 相同依赖于 M 和 D 的值

特点:

  ① float、double、decimal 都可以设置 D 和 M。M:整数部分 + 小数部分,D:小数部分。
  ② M 和 D 都可以省略,如果是 decimal,则 M 默认为 10,D 默认为 0。如果是 float 和 double,则会根据插入的数值的精度来决定精度。
  ③小数也可以通过 unsigned 设置无符号,如果想让整数位用 0 填充使用 zerofill 关键字。

四、字符型

类型大小用途
char(m)0-255 字节定长字符串
varchar(m)0-65535 字节变长字符串
tinyblob0-255 字节不超过 255 个字符的二进制字符串
tinytext0-255 字节短文本字符串
blob0-65 535 字节二进制形式的长文本数据
text0-65 535 字节长文本数据
mediumblob0-16 777 215 字节二进制形式的中等长度文本数据
mediumtext0-16 777 215 字节中等长度文本数据
longblob0-4 294 967 295 字节二进制形式的极大文本数据
longtext0-4 294 967 295 字节极大文本数据

特点:

  ① char 默认长度为 1,最大长度为 255。
  ② varchar 必须设置长度。
总结起来,有几点:

  • 经常变化的字段用 varchar
  • 知道固定长度的用 char
  • 尽量用 varchar
  • 超过 255 字符的只能用 varchar 或者 text
  • 能用 varchar 的地方不用 text

五、日期类型

类型字节范围格式
date31000-01-01/9999-12-31YYYY-MM-DD
time3'-838:59:59'/'838:59:59'HH:MM:SS
year11901/2155YYYY
datetime81000-01-01 00:00:00/9999-12-31 23:59:59YYYY-MM-DD HH:MM:SS
timestamp41970-01-01 00:00:00/2038 结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038 年 1 月 19 日 凌晨 03:14:07YYYYMMDD HHMMSS

  Timestamp 支持的时间范围较晓,但它和实际时区有关,更能反映实际的日期,而 datetime 则只能反映出插入时的当地时区。

六、其他类型

1、位类型

  bit(m),默认长度为 1,最大长度为 64 位,数据按二进制存储。可以使用位类型字面量和数字进行数据的添加。
  创建

alter table zyx add column wmj bit(8);

  添加

insert into zyx(wmj) values (12);
insert into zyx(wmj) values (b'01');

  以下这些是合法的位类型字面量

b'01'
B'01'
0b01

  而下面这些,则是非法的位类型字面量

b'2'    (2 不是合法的二进制数字 )
0B01    (0B 必须是 0b)

2、Enum 类型

  Enum 类型又称枚举类型,要求插入的值必须属于列表中指定的值之一。如果列表成员为 1~255,则需要 1 个字节,如果列表成员为 255~65535,则需要 2 个字节存储。最多存储 65535 个成员。

例子

  创建

alter table zyx add column wmj enum('2','3','b');

  添加

insert into zyx(wmj) values ('3');

3、Set 类型

  Set 类型类型和 Enum 类型类似,里面可以保存 0~65 个成员。和 Enum 类型最大的区别是:Set 类型一次可以选取多个成员,而 Enum 只能选一个。根据成员个数的不同,存储所占用的字节也不同。

成员数字节数
1~81
9~162
17~243
25~324
33~648
例子

  创建

alter table zyx add column wmj set('2','3','b');

  添加

insert into zyx(wmj) values  ('2,3');

标题:MySQL中的数据类型
作者:Yi-Xing
地址:http://47.94.239.232:10014/articles/2019/10/11/1570760300318.html
博客中若有不恰当的地方,请您一定要告诉我。前路崎岖,望我们可以互相帮助,并肩前行!