一、常见数据类型
1.数值型
(1)整型
分类:
- tinyint、smallint、mediumint、int、bigint
类型 | 占用字节 | 范围(有符号) | 范围(无符号) |
---|---|---|---|
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 | 4 | (-2,147,483,648,2,147,483,647) | (0,4,294,967,295) |
bigint | 8 | (-9,233,372,036,854,775,808,9,223,372,036,854,775,807) | (0,18,446,744,073,709,551,615) |
特点:
a.如果不设置是否有符号,则默认有符号;如果设置无符号,需添加unsigned关键字
b.如果插入的数值超出了整型的范围,会报out of range异常,并且插入的是临界值
c.如果不设置长度,会有默认的长度;(不同于范围,范围是由类型确定好的,而长度代表的是显示结果中的最大宽度。当插入的数值未达到设置的长度时,宽度无效;如果想用0在左边填充至指定长度,必须搭配zerofill使用,且加上zerofill则默认是无符号)
CREATE TABLE tab_int(
t1 INT(7) ,
t2 INT(7) UNSIGNED
);
INSERT INTO tab_int VALUES (123,123);
SELECT * FROM tab_int;
返回的结果为:
t1 | t2 |
---|---|
123 | 123 |
搭配zerofill使用,默认无符号,因此是否设置无符号便无意义了。
CREATE TABLE tab_int(
t1 INT(7) ZEROFILL,
t2 INT(7) ZEROFILL
);
INSERT INTO tab_int VALUES (123,123);
SELECT * FROM tab_int;
返回的结果为:
t1 | t2 |
---|---|
0000123 | 0000123 |
(2)小数
分类:
- 浮点型(可变长度):float(M,D)、double(M,D)
- 定点型(固定长度):decimal(M,D) (可简写为dec(M,D))
特点:
a.M:整数部位+小数部位合起来的长度,D:小数部位的长度;如果超过范围,则插入临界值
b.M和D都可省略;如果是decimal,则M默认为10,D默认为0;如果是float和double,则会随着插入数值的精度来决定精度
c.定点型的精确度较高,如果要求插入数值的精确度较高,如货币运算等则可考虑使用定点型
原则:
所选择的类型越简单越好,能保存数值的类型越小越好
2.字符型
较短的文本
(1)char和varchar类型用来保存MySQL中较短的字符串。
写法 | M的意思 | 特点 | 空间的耗费 | 效率 | |
---|---|---|---|---|---|
char | char(M) | 最大字符数, 可省略, 默认为1 | 固定长度的字符 | 比较耗费 | 高 |
varchar | varchar(M) | 最大字符数, 不可省略 | 可变长度的字符 | 比较节省 | 低 |
其中M表示该字段的值最长有多少字符数。(注意不是字节数,字符数简单来说就是,字母a是一个字符,一个汉字“数”也是一个字符)
此外,较短的字符型还有binary和varbinary(用于保存较短的二进制)、Enum(用于保存枚举)、Set类型(用于保存集合)
(2)Enum类型,又称枚举类型,不区分大小写。
CREATE TABLE tab_char(
c1 ENUM('a','b','c')
);
INSERT INTO tab_char VALUES ('a');
INSERT INTO tab_char VALUES ('A');
INSERT INTO tab_char VALUES ('e');
SELECT * FROM tab_char;
其中,前两行插入成功,第三行会报错。
(3)Set类型,集合类型,同样不区分大小写。
CREATE TABLE tab_set(
c2 SET('a','b','c','d')
);
INSERT INTO tab_set VALUES ('a');
INSERT INTO tab_set VALUES ('A,B');
INSERT INTO tab_set VALUES ('a,c,d');
SELECT * FROM tab_set;
较长的文本
text、blob
3.日期型
分类:
date 只保存日期
time 只保存时间
year 只保存年
datetime 保存日期和时间
timestamp 保存日期和时间
特点:
字节 | 范围 | 时区等的影响 | |
---|---|---|---|
datetime | 8 | 1000–9999 | 不受 |
timestamp | 4 | 1970-2038 | 受 |
# 将时区更改为东九区,比较datetime和timestamp的差异
SHOW VARIABLES LIKE 'time_zone';
SET time_zone = '+9:00';
CREATE TABLE tab_date(
t1 DATETIME,
t2 TIMESTAMP
);
INSERT INTO tab_date VAlUES(NOW(),NOW());
SELECT * FROM tab_date;
得到的结果为:
t1 | t2 |
---|---|
2020-08-21 09:47:54 | 2020-08-21 10:47:54 |