MySQL建表过程和字符类型意义

建表过程

建表跟我们实际生活中建表格或者 Excel 表格是一样的,主要就是列类型和数据构成的。

只要把表头建好了,这个表格实际上也就完成了,至于姓名,学校,公司下面的,实际上只是表的内容,所以建表的过程实际上就是画表头的过程,就是一个声明表头字段的过程。

 

建表语句

语法:create table 表名(

字段1 类型1 说明1,

字段2 类型2 说明2,

...

字段n 类型n 说明n)engine 引擎名 charset 字符编码;

举例如上:primary key,auto_increment,not null default,myisam 等含义往后再解释。

 

MySQL列类型

1.数值型

整型:tinyint,smallint,mediumint,int,bigint

数据类型分别占 1,2,3,4,8 个字节。

注意:下图的 tinyint(4) 后面的 4 代表的并不是存储在数据库中的具体的长度,以前总是会误以为 int(3) 只能存储 3 个长度的数字,int(11) 就会存储 11 个长度的数字,这是大错特错的。tinyint(1) 和 tinyint(4) 中的 1 和 4 并不表示存储长度,只有字段指定 zerofill 是有用,如 tinyint(4),如果实际值是 2,如果列指定了 zerofill,查询结果就是 0002,左边用 0 来填充。请参考:https://blog.csdn.net/jaryle/article/details/52025023

tinyint unsigned:无符号的 tinyint 类型。

zerofill:代表使用零填充,声明了 zerofill 就是 unsigned 类型。

小数型:float(M,D),double(M,D),decimal(M,D) -- float 为浮点类型,decimal 为定点类型

M:代表总位数(不包含小数点),D:代表小数位数

如 float(6,2) 代表数字位为 6 位,小数点后有 2 位。

float 占 4 个字节。

而 decimal 是一种定点类型,小数部分和整数部分分开存储,比 float 准确。

 

2.字符类型(char,varchar,text,blob)

char(6) ---- 定长字符串(对于定长字符串,写入时不够长度时用空格补,读出的时候把右边的空格删除)

varchar(6) ---- 变长字符串(对于变长字符串,需要在前缀用 1-2 个字节标记后面的长度)

区别:定长字符串查找快,但是会造成空间浪费,而不定长字符串能节省空间,但是查找起来没有定长字符串快。

注意:char(6) 或者 varchar(6) 后面的 6 应该理解为长度,而不能理解为字节,因为在不同的字符集下是不同的字节,gbk 下是 6 个 gbk 编码的汉字。

text:文本类型,可以存放比较长的文本段,但是搜索速度稍慢,因此如果不是特别长的内容,建议使用 char 或者 varchar 代替,varchar 最多能存 65535 长度那么长。注意 text 文本类型不需要加默认值。

blob:二进制类型,一般用来存放图像,音频等二进制的信息,防止因为一些字符集的问题导致存进去的时候部分二进制丢失,从而导致图像或者音频损坏。


版权声明:本文为weixin_38102771原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。