1 数值类型
取值范围
类型 |
字节 |
取值范围(有符号) |
取值范围(无符号) |
Tinyint |
1 |
-128~127 |
0~255 |
Smallint |
2 |
-32768~32767 |
0~65535 |
Mediumint |
3 |
-8388608~~8388607 |
0~16777215 |
Int |
4 |
-2147483648~2147483647 |
0~4294967295 |
bigint |
8 |
-20位~20位 |
0~20位 |
小数类型 |
|
|
|
Float |
4 |
-3.4028234E+38 |
3.40283466E+38 |
Double |
8 |
1.7976931348623157E+308 |
1.7976931348623157E+308 |
Decimal |
变长 |
1.7976931348623157E+308 |
1.7976931348623157E+308 |
语法和可选参数
整数型语法和可选参数
语法:数值类型[(M)] [unsigend] [zerofill]
示例1:tinyint(2) unsigned zerofill
示例2:int(3) unsigned zerofill
数值类型可选参数:
(M):这里M表示数字,对于插入的数字长度没有任何影响,当作默认int(11)对待。不管有没有跟zerofill参数,int(5)是能插入小于、等于、大于5的任何数的(前提满足默认长度)。
unsigned:用来控制是否有正负数。加了该参数,就不能插入负数了,只能插入正数。
zerofill:用来进行前导0填充。如对于int取值范围是11位,插入数字9,则会在前面补充10个0。
注意:对于zerofill参数,加上之后就是无符号,不能插入负数,虽然没写unsigned参数。
小数类型语法和可选参数
语法:小数类型[(M,D)] [unsigned] [zerofill]
示例1:float
示例2:float(5,3) unsigned zerofill
小数类型可选参数:
(M,D):M代表该值的总共长度,D代表小数点后面的长度,M和D又称为精度和标度。mysql保存值时会四舍五入,当然这个四舍五入是根据标度决定的,如D=3,而插入的小数位数大于3个,最后一位会四舍五入。如:123.4567–>123.457
unsigned:用来控制是否有正负数。加了该参数,就不能插入负数了,只能插入正数。
zerofill:用来进行后导0填充,举例(float(5,3) zerofill,插入小数3.4,则会变为03.004),也就是说,如果小数点左边的数<10,则会给前面补0,效果00~~09,小数点左边的数>=10则不会做任何填充;其次,小数点后面长度不满足情况下就给后面补0,3.4—>03.004
注意:针对小数类型,使用zerofill。通过下面的示例4,得出结论和上面的说辞有一定出入。通过实验得出,小数点后面不会补0,这也许和mysql版本有一定关系。
用法示例
create table sxl1(id01 tinyint);
insert into sxl1 values (-200);
insert into sxl1 values (-128);
insert into sxl1 values ('-125');
insert into sxl1 values (200);
insert into sxl1 values (127);
insert into sxl1 values (128);
create table sxl2(
id01 tinyint(3) unsigned zerofill,
id02 int(3) zerofill,
id03 int(5)
);
insert into sxl2 values(0,1,1);
insert into sxl2 values(100,233,1);
insert into sxl2 values(-1,1,1);
insert into sxl2 values(11,2000,300);
insert into sxl2 values(300,2000,300);
create table sxl3(f1 float, f2 double);
insert into sxl3 values (-1.1,234);
insert into sxl3 values (-1.01,234.23);
insert into sxl3 values (10,0.001);
insert into sxl3 values (10.099,99.999);
create table sxl4(f1 float(5,2) zerofill, f2 double(6,3) zerofill);
desc sxl4;
insert into sxl4 values(12.34,12.34);
insert into sxl4 values(1.1,1.2);
insert into sxl4 values(123.45,123.456);
insert into sxl4 values(123,456);
insert into sxl4 values(123.599,456.9999);
insert into sxl4 values(-123.45,-123.456);
select * from sxl4;
2 日期类型
取值范围
类型 |
存储空间 |
显示格式 |
取值 |
Datetime |
8 |
YYYY-MM-DD HH:MM:SS |
‘10000-01-01 00:00:00’到’9999-12-31 23:59:59’ |
TimeStamp |
4 |
YYYY-MM-DD HH:MM:SS |
1970-01-01到’2038-01-19 03:14:07’ |
Date |
3 |
YYYY-MM-DD |
‘1000-01-01’到’9999-12-31’ |
Time |
3 |
HH:MM:SS |
-838:59:59到838:59:59 |
Year |
1 |
YYYY |
1901到2155 |
示例
create table sxld1(mydate datetime);
desc sxld1;
insert into sxld1 values ('20221009');
insert into sxld1 values ('2022-10-09 11:10:09');
insert into sxld1 values (20221008122345);
select * from sxld1;
create table sxld2(mydate timestamp);
desc sxld2;
insert into sxld2 values ('20221009');
insert into sxld2 values ('2022-10-09 11:10:09');
insert into sxld2 values (20221008122345);
select mydate+0 from sxld2;
create table sxld3(mydate date);
desc sxld3;
insert into sxld3 values ('20221009');
insert into sxld3 values ('2022-10-09 11:10:09');
insert into sxld3 values (20221008122345);
insert into sxld3 values ('2022-10-10');
select * from sxld3;
create table sxld4(mydate time);
desc sxld4;
insert into sxld4 values ('10:20:20');
insert into sxld4 values ('5 10:20:20');
select * from sxld4;
create table sxld5(mydate year);
desc sxld5;
insert into sxld5 values ('2020');
insert into sxld5 values (2021);
select * from sxld5;
3 字符串类型
取值范围
类型 |
最大长度 |
备注 |
char |
255 |
char(M),M:字符数 |
varchar |
65535,但需要1-2个保存信息,同时由于记录的限制,因此最大长度为65532 |
编码不同字符数不同 GBK<=32767,UTf8<=21845-(1~2个占位符) |
tinyText |
L+n。L为最大长度 2^8+1 |
定义时,通常不用指定长度,可以自己计算 |
Text |
2^16+2 |
同上 |
mediumtext |
2^24+3 |
同上 |
longtext |
2^32+4 |
同上 |
enum |
1、2.权举选项量 |
– |
set |
1、2、3、4。元素数量:64 |
– |
Binary |
– |
二进制数据(字节而非字符) |
Varbinary |
– |
二进制数据(字节而非字符) |
blob |
– |
二进制数据(字节而非字符) |
示例
create table sxlc1(idx char)
desc sxlc1
insert into sxlc1 values ('sxl');
insert into sxlc1 values ('s');
select * from sxlc1
create table sxlc2(idx char(10))
desc sxlc2
insert into sxlc2 values ('sxl');
insert into sxlc2 values ('s');
insert into sxlc2 values ('12345678901');
select * from sxlc2
create table sxlc3(idx varchar(10))
desc sxlc3
insert into sxlc3 values ('sxl');
insert into sxlc3 values ('s');
insert into sxlc3 values ('12345678901');
select * from sxlc3
create table sxlc4(idx varchar(65535));
create table sxlc4(idx varchar(21845));
create table sxlc4(idx varchar(21844));
create table sxlc4(idx varchar(21843));
create table text1(id int,name tinytext)
create table text1(id int,name text)
create table text1(id int,name mediumtext)
create table text1(id int,name longtext)
create table enum1(output enum('Y','N'));
desc enum1;
insert into enum1 values ('Y');
insert into enum1 values ('N');
insert into enum1 values ('C');
select * from enum1
create table enum2(output enum('1','2','3','4','5'));
desc enum2;
insert into enum2 values ('1');
insert into enum2 values ('2');
insert into enum2 values ('5');
insert into enum2 values ('5');
insert into enum2 values ('2','4');
insert into enum2 values ('A');
select * from enum2;
create table set1 (output set('A','B','C','D'));
desc set1;
insert into set1 values ('a');
insert into set1 values ('A');
insert into set1 values ('B,D');
insert into set1 values ('A,B,C,D');
insert into set1 values ('A,A');
insert into set1 values ('D,C');
insert into set1 values ('C,H');
JSON数据类型
create table json1 (id int, info json);
desc json1;
insert into json1 values (1,'{"name":"sxl1","sex":"男","age":"25","address":"甘肃"}');
insert into json1 values (1,'{"name":"sxl2","sex":"男","age":"30","address":"山东"}');
insert into json1 values (1,json_object("name","sxl3","sex","女","age","22","address","海南"));
select * from json1
select * from json1 where info -> '$.name' = 'sxl1';
select * from json1 where json_extract(info,'$.name') = 'sxl2';
select json_type(info -> '$.address') from json1;