漆黑的夜空,总能让人产生无数的遐想,不知屏幕前的你,这周过得怎么样?玩耍也好,"修炼"也好,总之时间在不断从我们各处穿梭而过,
但你既然都点进来了,那在这短短的5分钟内我就来带你领来温习一下Mysql数据类型吧!
#常见的数据类型
数值型:
整型
小数:
定点数
浮点型
字符型:
较短的文本:char,varchr
较长的文本:text,blob(较长的二进制数据)
一.整型
分类:
tinyint,smallint,mediumint,int/integer,bigint
1 2 3 4 8
特点:
①如果不设置无符号还是有符号,默认是有符号,如果想设置无符号,
需要添加UNSIGNED关键字。
②如果插入的数值超出了整数的范围,会报out if range异常,并且插入临界值
③如果不设置无符号和有符号,有符号的Int长度默认11,无符号Int的默认长度10
④长度代表了显示的最大宽度,如果不够用会用0在左边填充,
但必须搭配ZEROFILL使用。
#案例:1.如何设置有符号和无符号 #有符号的 CREATE TABLE tab_int( t1 INT ); DESC tab_int; 插入一条数据 INSERT INTO tab_int VALUES(-123456); /* Affected rows: 1 Found rows: 0 Warnings: 0 Duration for
1 query: 0.016 sec. */ /* 受影响的行:1 找到的行:0 警告:0 1 查询的持续时间:0.016 秒*/ 删除表 DROP TABLE IF EXISTS tab_int; #重新创建表 创建t2为无符号的数据类型 CREATE TABLE tab_int( t1 INT, t2 INT UNSIGNED ); DESC tab_int;
#插入一条数据
#插入一条数据
INSERT INTO tab_int VALUES(-123456,0);
SELECT * FROM tab_int;
#长度设置,长度是不代表数据范围,只是代表占术数据的宽度。数据范围由类型决定。
设置了宽度,如果不够会用0去填充。
删除表,再次创建
DROP TABLE IF EXISTS tab_int;
CREATE TABLE tab_int(
t1 INT(7),
t2 INT(7) UNSIGNED
);
DESC tab_int;
插入数据,查看数据
INSERT INTO tab_int VALUES(123,123);
SELECT * FROM tab_int;
为什么没0填充?
删除表,再次创建,给字段后添加ZEROFILL关键字,
添加ZEROGILL后变为无符号数据类型。
DROP TABLE IF EXISTS tab_int;
CREATE TABLE tab_int(
t1 INT(7) ZEROFILL,
t2 INT(7) UNSIGNED
);
插入数据,查看数据
INSERT INTO tab_int VALUES(123,123);
SELECT * FROM tab_int;
二.小数
备注:±正负号:按住Alt再用小键盘输入0177
分类
1.浮点型
float(M,D)
double(M,D)
2.定点型
dec(M,D)
decimal(M,D)
定点型
特点
①
M:整数部位+小数部位
D: 小数部位
如果超过范围,则插入临界值
②
M和D都可以省略
如果是decimal,则M默认为是10,D默认为0(如果超过会报错)
如果是float和double,则会根据插入的数值精度来决定精度
③
定点型的精确度较高,如果要求插入数值的精度较高如
货币运算等则考虑使用
备注:一般用float就行,节省空间
建表数据类型选择的原则:
所选择的类型越简单越好,能保存数据类型越小越好。
#测试M与D CREATE TABLE tab_float( f1 FLOAT(5,2), f2 DOUBLE(5,2), f3 DECIMAL(5,2) ); DESC tab_float;
插入数据,正常执行
INSERT INTO tab_float
VALUES(123.45,123.45,123.45);
SELECT * FROM tab_float;
再次插入数据
INSERT INTO tab_float
VALUES(123.456,123.456,123.456);
查询数据
SELECT * FROM tab_float;
四舍五入了
再次插入数据
INSERT INTO tab_float
VALUES(123.4,123.4,123.4);
SELECT * FROM tab_float;
再次插入,测试
INSERT INTO tab_float
VALUES(1523.4,1523.4,1523.4);
超出范围报错,无法插入
先删除,再次创建tab_float表,省略后(M,D),正常执行
DROP TABLE tab_float;
CREATE TABLE tab_float(
f1 FLOAT,
f2 DOUBLE,
f3 DECIMAL
);
SELECT * FROM tab_float;
再次插入数据,f3报错
INSERT INTO tab_float VALUES(123.4523,123.4523,123.4523);
DESC tab_float;
三.字符型(串数据/文本型/二进制)
char和varchar类型
说明:用来保存MySql中较短的字符串
分类
较短的文本:
cahr varchar
特点:
备注:
固定的用char如性别只有男或女
姓名用varchar 不同民族的姓名长度不一样
char(M)可以省略M,默认为1
varchar不可以省略
较长的文本:
text
blob(较大的二进制)
位类型
Binary和varbinary类型(较短的二进制)
说明:类是与char与varchar,不同的是它们包含了二进制字符串不包
含非二进制字符串。
Enum类型(一娜姆)
说明:又称为枚举类型哦,要求插入的值必须属于列表中指定的值之一。
其他:
binary和varbinary用于保存较短的二进制
enum用于保存枚举
set用于保存集合
建表
CREATE TABLE tab_char(
c1 ENUM('E','S','W','N')
);
#东—East,西—West,南—South,北—North
插入数据
INSERT INTO tab_char VALUES('w');
INSERT INTO tab_char VALUES('W');
INSERT INTO tab_char VALUES('N');
Affected rows: 3 Found rows: 0 Warnings: 0 Duration for 3 queries:
0.015 sec.
受影响的行:3 找到的行:0 警告:3 个查询的 0 持续时间:0.015 秒。
性别(男女)与季节(春夏秋冬)也可以考虑使用枚举类型。
Set类型
说明:和Enum类型类似,里面可以保存0~64个成员。
和Enum类型最大的区别是:
SET类型可以选取多个成员,
而Enum只能选一个,根据成员个数不同,存储所占的字节也不同。
#建表测试
CREATE TABLE tab_set(
s1 SET('c','x','q','d')
);
DESC tab_set;
#插入数据,初夏秋冬 INSERT INTO tab_set VALUES('c'); INSERT INTO tab_set VALUES('c,x'); INSERT INTO tab_set VALUES('c,q,d'); SELECT * FROM tab_set; #插入成功,不区分大小写,大写插入,小写入库
四. 日期型
1.Timestamp支持的时间范围较小,
取值范围:1970010108001--2038年的某个时间
Datetime的取值范围:1000-1-1--9999-12-31
2.timestamp和实际时区有关,更能反映实际的日期,
而datetime则只能反映出插入时的当地时区。
3.timestamp的属性收Mysql版本和SQLMode的影响很大。
建表
CREATE TABLE tab_date(
t1 DATETIME,
t2 TIMESTAMP
);
插入数据
DESC tab_date;
INSERT INTO tab_date VALUES(NOW(),NOW());
SELECT * FROM tab_date;
查看时区
SHOW VARIABLES LIKE 'time_zone';
本地时区
SET time_zone='+8:00';
修改时区,改为东9区
SET time_zone='+9:00';
再次查询
SELECT * FROM tab_date;
小结:
分类:
date只保存日期
time只保存时间
year只保存年
datetime保存日期+时间
timestamp保存日期+时间
特点:
字节 范围 时区等影响
datetime 8 1000-9999 不受
timestamp 4 1970-2038 受
既然都看到这里了,希望你能有所收获。要不也动动你的小手手也练习一下???