1 列类型
只要把表头建好了,表就完成了。建表的过程就是声明字段的过程.我们建列时,自然想到的是,能够容纳放置的内容,但又不浪费。存储同样的数据,不同的列类型,所占据的空间和效率是不一样的,这就是建表前要学习列类型的意义。
计算机中的复数,是按照补码规则来换算的。
2 int系列的声明时的参数
三种:(M),unsigned,zerofill
int不加特殊说明,默认是有符号。
3 添加新的字段。同时用unsigned修饰tinyint
mysql> alter table class add score tinyint unsigned not null default 0;
4 分析(M)参数
M必须和zerofill配合使用才有意义。
分析学生学号类型, 1 长度相同,没有的要用零来填充 2 没有复数
mysql> alter table class add snum smallint(5) zerofill not null default 0;
Query OK, 3 rows affected (0.83 sec)
Records: 3 Duplicates: 0 Warnings: 0
如果所示,snum统一补0,而且补到5位。为什么补到5位,因为M为5,总结,M表示补0的宽度,和zerofill配合使用才有意义,单独使用没有意义。
观察snum的类型,可知zerofill则同时必是unsigned的。
5 创建一个包含浮点类型的表
mysql> create table salary(
-> sname varchar(20) not null default '',
-> gongzi float(6,2)
-> )engine myisam charset utf8;
Query OK, 0 rows affected, 1 warning (0.74 sec)
6 浮点数占多大的空间?
float能存 1038,10-38
如果M<=24,按照4个字节存储,否则占8个字节存储
7 用来表示数据中的小数除了float浮点,还有一种叫定点,定点是把整数部分和小数部分分开存储的,比flaot精确
8 float有时会损失精度,如果像账户这样的敏感可以用decimal
9 字符型
char,vchar,text,blob
char 被成为定长类型
varchar 被成为变长类型
10 查找行记录时,如果都是定长,完全可以通过行数与行的长度计算出来文件指针的偏移量。对于定常N,不论够不够指定长度,实际都占据N个长度,如果不够N个长度,用空格在末尾补至N个长度。而对于varchar(N),不用空格补齐,但列内容前,有1-2个字节标志该列的内容长度。
11 char型,如果不够M个字符,内部用空格补齐,取出时再把右侧空格删掉。这意味着,如果右侧本身有空格,将会丢失。
12 char(M)和varchar(M)限制的是字符数,不是字节数。
即 char(2) utf8,能存2个utf8字符,比如”中国“;
13 text类型:文本类型,可以存比较大的文本段,一般用来储存文章内容,搜索速度稍慢。
声明text列类型不用加默认值
14 blob是二进制类型,用来存储图像,音频等二进制信息。
意义:二进制从0-255都有可能出现,blob在于防止因为字符集的问题,导致信息丢失。比如一种图片中有0XFF字节,在ASCII字符集中认为其非法,在入库的时候,被过滤了。造成了照片的损坏,若声明为二进制类型时,就不会出现数据丢失。