所谓建表,就是声明列的过程
数据是以文件的形式存储在硬盘中的,而不同的数据类型占据的空间不一样,所以我们列的选取原则为:既够用,又不浪费。
详解列类型:
整型(默认是有符号的)
tinyint,smallint,mediumint,int,bigint
0填充,则该列是不为负的,所以可以省略unsigned。
M:必须配合zerofill使用。如果没有 设置zerofill,则不起作用。
M代表0填充的位数,比如设置了M为5,则00001
填充之后只是显示效果而已,不会影响数据真是值
zerofill:启用零填充
default:一般配合no null使用 。 not null default 0,不为空,且默认值为0
浮点型
float(M,D)
decimal(M,D)
M:精度,即整数+小数的总位数(不算小数点)
D:标度,即小数位数
例:float(6,2) -9999.99-->+9999.99
float(4,2) unsigned 0.0->+99.99
占用字节数:不是M,D越大,则占据的字节越大。一般占用4个字节或8个字节
一般来讲数据库中的浮点数是不能够指定位数的,例如sqlserver,就不可以,mysql比较特殊,他可以指定位数
浮点型的四舍五入:1234舍,6789进。如果为5,则需要看该位前面的数字为多少,如果为2468,如果为1379,则
字符型
char:定长,char(M),其中M代表宽度,即可容纳的字符数。 (不是字节),比如我们定义为char(4),且设置编码为utf-8,则可以最多放4个汉字。而在utf8中一个汉字占3个字节。
这也从侧面反映出M代表的是字符数,而不是字节数。
varchar:不定长,varchar(M),M代表宽度,即可容纳的字符数。(不是字节)
区别:
char定长,M个字符,如果小于M个字符,实占M个字符。其余的用空格补齐,在取数据的时候mysql自动会把空格去掉。
varchar:M个字符,存的小于M个字符,设为N,N<=M,实际占N个字符。但是他会多出1-2个字节用来存储实际数据到底是几个字符。这两个字符就是多余的开销
可以看出来varchar的利用率由于多出的1-2个字节,所以他的利用率用于小于100%,而char则是<=100%
售票员是开销