MySQL基础(五)常见数据类型

一、常见数据类型

1.数值型

(1)整型

分类:

  • tinyint、smallint、mediumint、int、bigint
类型占用字节范围(有符号)范围(无符号)
tinyint1(-128,127)(0,255)
smallint2(-32,768,32,767)(0,65 535)
mediumint3(-8,388,608,8,388,607)(0,16,777,215)
int4(-2,147,483,648,2,147,483,647)(0,4,294,967,295)
bigint8(-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;

返回的结果为:

t1t2
123123

搭配zerofill使用,默认无符号,因此是否设置无符号便无意义了。

CREATE TABLE tab_int(
    t1 INT(7) ZEROFILL,
    t2 INT(7) ZEROFILL 
);
INSERT INTO tab_int VALUES (123,123);
SELECT * FROM tab_int;

返回的结果为:

t1t2
00001230000123

(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的意思特点空间的耗费效率
charchar(M)最大字符数, 可省略, 默认为1固定长度的字符比较耗费
varcharvarchar(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 保存日期和时间

特点:

字节范围时区等的影响
datetime81000–9999不受
timestamp41970-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;

得到的结果为:

t1t2
2020-08-21 09:47:542020-08-21 10:47:54
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值