MySQL学习笔记(2)-列类型

通过mysql的配置:

Character_set_client客户端发送数据编码

Character_set_results客户端接收数据的编码

通过指令

show variables like 'character_set_%';




校对规则

每一套,编码字符集都有与之相关的校对规则。

什么是校对规则?在当前编码下,字符之间的比较顺序是什么。


每个字符集都支持不定数量的校对规则,可以通过如下指令:

show collation;

在设置字符集时,可以设置当前字符集所采用的校对规则,如果不设置校对规则,那么每一个字符集,都有一个默认的校对规则。

create table tbl1(
name varchar(10)
) character set gbk collate gbk_chinese_ci;
create table tbl4(
name varchar(10)
) character set gbk collate gbk_bin;

列类型


整型:

tinyInt:1个字节 ,-128--127有正负(有符号)  0--255(无符号)

是否有符号,可以在定义时,使用unsigned标识,没有符号,不写就认为有符号。

create table tbl_int(
a tinyint unsigned,
b tinyint
);
insert into tbl_int values(255,127);

定义显示宽带

通过规定数据的显示宽度,达到统一显示的目的。

类型(M)M表示显示的最小宽度是多少。 

需要使用前导零填充达到目的。称之为zerofill

注意:

1.不影响数的范围

2.宽度大的不影响,不会截取

alter table tbl_int add c tinyint(3);

小数

浮点数

float单精度  :默认精度位数为6位左右

double双精度:默认精度位16位左右


create table num_2(
a float,
b double
);
insert into num_2 values(123456789.123456789,123456789.123456789);  有精度的丢失

支持,控制数值的范围。Type(M,D)

M表示所有的数值位数(不包括小数点,和符号)

D表示允许的小数位数。 

create table num_3(
a float(5,2),
b double(8,3)
);
insert into num_3 values(567.12,1234.547);
select * from num_3;

 

浮点数支持科学记数法

insert into num_3 values(0.23E3,456.7E2);
select * from num_3;

定点数:

decimal(M,D)

M总位数

D小数位数。(范围存在)

M默认为10,D默认为0;

create table num_4(
a decimal(10,2)
);
insert into num_4 values(1234.56);
insert into num_4 values(12345678.56);
insert into num_4 values(1234.567);

小数也支持zerofill,支持无符号unsigned

alter table num_4 add b decimal(10,2) zerofill;
insert into num_4 values(1234.56,1234.56);

日期时间

年月日时分秒 Datetime

年月日Date

时间戳Timestamp:

存储时,整型,但是表示时,日期时间。检索列时,+0可以检索时间戳。


create table dt_1(
a datetime,
b timestamp
);
insert into dt_1 values('2018-06-02 18:20:10','2018-06-02 18:20:21');

支持任意分隔符的日期:

但是如果出现歧义,不建议使用特殊的分隔符,会导致逻辑不清晰。


支持2位 年份:

70-69 1970-2069

70-99 19xx

0-69   20xx 

不建议使用


Time类型

表示意义:

1,一天中的时间

2,表示时间间隔,在表示间隔时,可以使用天来表示。格式:

D HH :MM:SS              D天

create table t_1(
ago time
);
insert into t_1 values('23:12:11');
insert into t_1 values('231211');
insert into t_1 values('5 12:34:11');
insert into t_1 values('34 12:34:11');

Year类型

此时日期的范围,就不是1000-9999

而是1901-2155一个字节表示

create table y_1(
a year
);
insert into y_1 values(1234);
insert into y_1 values(1985);
select * from y_1;

字符串类型

Char(m)固定长度

Varchar(M)可变长度

M表示允许的字符串长度。

M在varchar中的表示,是允许的最大长度。char内M表示严格限定的长度,M表示的是字符数,而不是字节数,但是,总的长度的使用是按照字节计算的。


create table s_1(
a char(18),
b varchar(18)
);
create table s_2(
a varchar(65535)
);
create table s_3(
a varchar(65535)
) character set gbk;
21845*3 = 65535
32767*2 = 65534
注意,字段的最大长度,除了类型本身限制之外,记录的总长度也有限制



真实的varchar的长度:

总长度65535

varchar的特点:当类型数据超过255个字符时,采用2个字节表示长度。

65535-2=65533

整条记录,需要一个额外的字节,用于保存当前字段的null值。

除非所有子段都不是null,这个字节才可以省略。一个记录,不论有多少个字段存在null,都是使用统一的一个字节来表示。而不是每个字段一个字节。latin1拉丁 1个字节一个字符

create table s_4(
a varchar(65533)
) character set latin1;
create table s_5(
a varchar(65533) nor null
) character set latin1;

create table s_6(
a varchar(65532),
b tinyint 
) character set latin1;
create table s_7( 
a varchar(65532) not null,
b tinyint not null
) character set latin1;    

Text

2^16

文本,有很多兄弟类型

Tinytext longtext 表示的字符串长度不一样。

create table s_8(
a text,
b text
) character set latin1;

枚举

create table s_9(
gender enum('female','male')
);
insert into s_9 values('male');
insert into s_9 values('female');
insert into s_8 values('other');

set 

create table s_10(
hobby set('basket','football','pingpang')
);
insert into s_10 values('basket,football');
insert into s_10 values('basket,pingpang');
select hobby+0 form s_10;        /* 位运算 011=3    101=5


 

猜你喜欢

转载自blog.csdn.net/qq_38826019/article/details/80548032