《Mysql数据类型,校对集操作.doc》由会员分享,可在线阅读,更多相关《Mysql数据类型,校对集操作.doc(15页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、-作者xxxx-日期xxxxMysql数据类型,校对集操作【精品文档】校对集,collate校对集指的是字符之间的比较关系!如:a B c 三个字母如何排序?在 ASCII 码下的排序为:B a c在mysql命令客户端下,使用 order by 对结果排序,看结果:顺序为 a-B-c 忽略了大小写!但是这种顺序可以被校对集改变:利用 show collation; 语句,可以查看所有的校对集校对集,依赖于字符集校对集:指的是,在某个字符集下,字符的排序关系应该是什么,称之为校对集!再创建一个utf8_bin校对集表,再对 a,B,c 进行排序:create table collate_2 (
2、c varchar(10) charset=utf8 collate=utf8_bin;再插入同样的三个字母:insert into collate_2 values(a),(B),(c);排序结果如下:典型的后缀:_bin :二进制编码层面直接比较_ci :忽略大小写比较(大小写不敏感)_cs:大小写第三比较MYSQL数据类型(列类型,字段类型)三大类:数值,字符串,日期时间数值整数型类型字节最小值(有符号/无符号)最大值(有符号/无符号)tinyint1-128/0127/255smallint2-32768/032767/65535mediumint3-8388608/08388607/
3、16777215int/intege4-2147483648/02147483647/4294967295bigint8-9223372036854775808/09223372036854775807/如何选择:通过业务逻辑判断!常见的是 int , tinyint !mysql的整型,有php整型不具备的概念:1:无符号,只能表示整数或0。那么最大的整数会很大默认是有符号!可通过整型的 unsigned 选项, int unsigned 设置整型无符号2:显示宽度显示宽度不决定整数的范围,而决定在显示出该数之后,如果宽度不够,则采用前导零补齐。此时需要 zerofill 来设置如:crea
4、te table type_int_3 (num int unsigned zerofill);insert into type_int_3 values (0);insert into type_int_3 values (1000);insert into type_int_3 values (1000000);可见,无符号,默认的宽度是10,因此全都使用0来补齐可以设置整型的显示宽度! int(M) 即可! M 最大为 255!M的值不决定范围,只决定显示宽度!create table type_int_4 (num int(30) unsigned zerofill);insert i
5、nto type_int_4 values (0);insert into type_int_4 values (1000);insert into type_int_4 values (1000000);注意:如果走出了宽度范围,则直接显示!额外的,mysql中,没有布尔型!但存在 Boolean 这个关键字,表示 tinyint(1)典型的,0表示假,1表示真小数类型类型存储空间(字节)最小值(理论)最大值(理论)FLOAT4-3.402823466E+383.402823466E+38DOUBLE8-1.7976931348623157E+3081.7976931348623157E+3
6、08DECIMAL变长,大致是每9个数字,采用4个字节存储。整数和分数分开计算M,最大是65D,最大是30默认是10,2-(65个9)(+65个9)单精度、双精度默认的有效位数:在定义浮点数时,典型的需要指明其有效位数,和小数位数float(M,D);double(M,D);M:所有的有效位数D:其中的小数位数以上两个值,决定一个浮点数的有效范围!典型的浮点数:float(10,2);注意:浮点数是近似值,不是精确值!如果一个数,很大,接近最大值,可能会出错一旦出现精确数据(小数)需要保存,则要用到定点数。定点数:小数点是固定的!decimal,与定义浮点数一样,也有有效位数与小数位数的概念:
7、decimal(M,D);不是数的形式存储,类似于字符串的形式存储!注意:关于小数1:支持科学计数法2:同样支持 unsigned,无符号3:同样支持 zerofill字符串类型类型最大长度备注char255Char(M),M字符数varchar65535,但需要1-2个保存信息,同时由于记录的限制,因此最大为65532编码不同字符数不同:Gbk<=32767Utf8<=21845tinyText,text,mediumText,longTextL + n。L为最大长度28+1, 216+2, 224+3, 232+4定义时,通常不用指定长度,可以自己计算。enum1、2。枚举选项
8、量(65535)内部存储是整型表示。字段值只能是某一个set1、2、3、4、8。元素数量:64binary,varbinary,blobBinary(char),varbinary(varchar),blob(text) 做类比二进制数据(字节而非字符)char,最基本(定长)的字符串类型用于保存,长度固定的内容!速度快,但是保存变长数据会浪费空间varchar,可变长度的字符串用于保存长度可变的数据保存变长数据时,节省空间,处理起来麻烦些char(L); varchar(L)L,表示每个数据的最大长度。单位是字符数(不是字节数)。L的值不多大都可以,有最大值:1:mysql一条记录最大值不能
9、超过65535(255*255)个字节(字段的长度加起来,不能超过这个值)2:长度单位是字符数,与编码是相关的 utf8编码下一个字符占3个字节 gbk编码下一个字符占2个字节采用单字节编码测试下:Latin1;测试发现,只有一个字段,而且是单字节字符集,还是不能是65535,原因是:为什么是65532呢,少了3个字节:3:由于 varchar 是变长,需要记录下真实的数据到底有多长!每个VARCHAR类型的数据还需要额外的1个或2个字节保存真实数据的长度!(取决于真实数据的长度)4:整条记录还需要一个字节来保存哪些字段为 null但是在使用时,varchar如果超过255就选择 text 来
10、保存!text,文本,不限长度的字符串该字段,不需要指明长度,而且也不会算入到记录的总长度内!选择:定长:char变长较短:255个字符之内,使用varchar变长较长:使用text枚举,enum,单选需要在定义枚举类型时,列出哪些是可能的!在处理时,类似字符串型进行操作!意义在于:1:限定值的可能性2:速度快,比普通的字符串速度快原因是枚举型是利用整数进行管理的,采用2个字节进行管理每个值,都是一个整数标识,从第一个选项开始为1,逐一递增!管理是整数的形式,速度比普通字符串快!2个字节,0-65535,因此有 65532 个选项可以使用!集合,set,复选类似于 enum 枚举,定义时,也需
11、要指定其已有值!与字符串相比,优势是:1:也是采用整数进行管理的!采用位运算,从第一位开始为1,逐一乘22:每个集合类型8个字节,64位,因此可以表示64个元素注意:站在mysql的角度,尽量多用枚举和集合! 但是站在php操作的角度,尽量少用!(兼容性差)日期时间类型datetime,日期时间。用于保存大范围的日期时间! 在处理时使用字符串形式进行管理create table type_datetime_1 (now datetime);insert into type_datetime_1 values (1234-12-25 12:32:06);timestamp,时间戳常用的典型时间
12、,从1970-1-1开始。占用空间少,而且是以整型的形式管理,但是以字符串形式展示create table type_timestamp_1 (now timestamp);insert into type_timestamp_1 values (2008-8-8 20:08:08);date,日期如果只记录日期,不记录时间采用 date !year,年在保存年份的时候。采用一个字节保存!因此只能表示 1901-2155 年time,时间除表示时刻的概念还可以表示时间跨度!时间段的概念!create table type_time_1 (len time);insert into type_time_1 values (16:17:20);insert into type_time_1 values (3 16:17:20);总结:1:除了 time ,表示都是时间点的概念!time 还表示时间跨度!2:年份的表示 可以采用2位年份: 0-69 : 表示20XX年 70-99 :表示19XX年3:除了 - 还有 :可以作为日期分隔符,还有其他很多字符都可以放在php程序中:小范围的日期:使用整型大范围的日期:使用字符串【精品文档】