您的位置:首页 > 数据库 > MySQL

Mysql的数据类型

2015-11-04 21:45 281 查看
一:整型数据
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
('王');

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: