通过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