一、常见的数据类型
数值型:
整型
小数:定点数、浮点数
字符型
短文本:char、varchar
长文本:text、blob(较长的二进制数据)
日期型
二、整型
类型 | 字节 | 范围(有符号) | 范围(无符号) |
---|---|---|---|
Tinyint | 1 | (-128,127) | (0,255) |
Smallint | 2 | (-32 768,32 767) | (0,65 535) |
Mediumint | 3 | (-8 388 608,8 388 607) | (0,16 777 215) |
Int 或 Integer | 4 | (-2 147 483 648,2 147 483 647) | (0,4 294 967 295) |
Bigint | 8 | (-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
);
三、小数
定点数
类型 | 字节 | 范围(有符号) | 范围(无符号) |
---|---|---|---|
float | 4 | (-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) |
double | 8 | (-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 字节 | 变长字符串 |
tinyblob | 0-255 字节 | 不超过 255 个字符的二进制字符串 |
tinytext | 0-255 字节 | 短文本字符串 |
blob | 0-65 535 字节 | 二进制形式的长文本数据 |
text | 0-65 535 字节 | 长文本数据 |
mediumblob | 0-16 777 215 字节 | 二进制形式的中等长度文本数据 |
mediumtext | 0-16 777 215 字节 | 中等长度文本数据 |
longblob | 0-4 294 967 295 字节 | 二进制形式的极大文本数据 |
longtext | 0-4 294 967 295 字节 | 极大文本数据 |
特点:
① char 默认长度为 1,最大长度为 255。
② varchar 必须设置长度。
总结起来,有几点:
- 经常变化的字段用 varchar
- 知道固定长度的用 char
- 尽量用 varchar
- 超过 255 字符的只能用 varchar 或者 text
- 能用 varchar 的地方不用 text
五、日期类型
类型 | 字节 | 范围 | 格式 |
---|---|---|---|
date | 3 | 1000-01-01/9999-12-31 | YYYY-MM-DD |
time | 3 | '-838:59:59'/'838:59:59' | HH:MM:SS |
year | 1 | 1901/2155 | YYYY |
datetime | 8 | 1000-01-01 00:00:00/9999-12-31 23:59:59 | YYYY-MM-DD HH:MM:SS |
timestamp | 4 | 1970-01-01 00:00:00/2038 结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038 年 1 月 19 日 凌晨 03:14:07 | YYYYMMDD 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~8 | 1 |
9~16 | 2 |
17~24 | 3 |
25~32 | 4 |
33~64 | 8 |
例子
创建
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/articles/2019/10/11/1570760300318.html
博客中若有不恰当的地方,请您一定要告诉我。前路崎岖,望我们可以互相帮助,并肩前行!