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;