一:整型数据 tinyint:1 byte smallint 2 byte mediumint: 3 byte int: 4 byte big: 8 byte 这里详解tinyint,其他几种和它的用法类似。 tinyint 无符号表示范围:0-255,有符号表示范围:-128-127 1、 三个修饰的可选属性:tinyint(M) unsigned zerofill (M):宽度(在0填充时才有意义) unsigned:无符号(要是不写,默认是有符号的)eg:age tinyint unsigned zerofill:0填充(默认无符号) 2、当不填充数据时,推荐使用设置默认值。因为不设置时,没数据时会默认null,但null不好 比较(比较null的语句为select x is null。返回值1表示是)。eg:not null default 0 3、添加一个新列 // 添加age列到表msg中,列是tinyint型,5位0填充,默认值为0 eg: alter table msg add age tinyint(5) zerofill not null default 0; 二:小数型数据 float(M, D) 浮点型小数 decimal(M, D) 定点型小数 M:表示小数的总位数,不包括小数点 D:小数的位数 eg:float(6, 2) 表示数的范围为:-9999.99 —— +9999.99 float(6, 2) unsigned 表示范围为: 0.00 —— +9999.99(与整型的无符号表示有点区别) float和deciaml的区别在于,后者表示的数据更精确。 eg: alter table msg add age float(6, 2) zerofill not null default 0.0; 这里要注意一下,0填充为:000.00 加小数点一共6位。 三:字符型数据 char 定长字符串 char(M) 0 <= M <= 255 varchar 变长字符串 varchar(M) 0 <= M <= 65535 text 文本串 text 存2万到6万个字符 char与varchar的区别: 1、存储范围不同 上面的M代表存放字符的个数,如char(8)表示可以存放8个字符(注意:'a','王', 前者占一个字节,后者占两个字节,但都只算一个字符)。varchar与char有点区别, 它最多存放65535个字节的数据,由于一个utf8数据占3个字节,因此存放utf8的字符 大约是两万个,这就是text为什么存放数据为2万到6万。 2、空间利用率不同 char是定长的:申请M个空间,实存N个空间,当N<M时还是占用M个空间 varchar是变长的:申请M个空间,实存N个空间,当N<M时占用N+2byte个空间 (2byte用来表示实际存储长度) 3、对末尾空格的处理不同 我们知道,char当实际存储空间小于申请空间时,剩下的空间用空格填充。 因此当数据的末尾是空格时,char型存储会把空格当填充数据处理 因此会导致数据的丢失。varchar就不会出现这种情况。 4、定长的char型虽然有时候浪费空间,存储、读取速度快。 text是文本类型,可以存比较大的文本段,但收索速度较慢,如果文本不是特别长 建议用char或者varchar代替还有就是text不用加默认值,加了也没用。 四:时间类型: 1、year类型:典型格式:1994 表示范围:1901——2155 注意:0000表示错误的选择 当输入两位数时:00——69表示:2000年到2069年 70——99表示:1970年到1999年 2、date类型:典型格式:1949-10-01 表示范围:1000-01-01——9999-12-31 3、time类型:典型格式:12:12:12 表示范围:-838:59:59——+838:59:59 4、datetime类型:典型格式:1949-10-01 12:12:12 表示范围:1000-01-01 00:00:00 —— 9999-12-31 23:59:59 时间戳:表示1970-01-01 00:00:00 到当前时刻的秒数。 datetime类型表示时间虽然便于我们观察,但不便于计算机的运算,因此一般存储注册时间、 商品发布时间等使用int来记录时间戳,这样既便于计算机运算,又便于转换成易于观察的格式。 小知识点: 1、在一条语句前面加入#号表示,该行为注释。eg: #时间类型: 2、关于enum枚举类型。它是字符类型中的一种,但不太符合数据库的设计原则 eg: // 插入时数据要么为'男', 要么为'女' create table gender( gender enum('男', '女') ); // 正确(注意插入时不加列选项,表示插入所有列) insert into gender values ('男'); // 错误 insert into gender values ('王');