mysql数据库内容总结
数字类型:
Tinyint(M) unsigned zerofull
1个字节 默认的是有符号的-128~127
unsigned: 无符号整数 范围0~255
M: 代表宽度 (在zerofull时才有意义),只是一个显示效果,不会影响到实际的数据长度
zerofull: 零填充(如果某列是zerofull默认就是unsigned) 因为不会有 0000-1 的情况
零填充(例: 0005,多少个零就是M限制宽度)
列一般不要为null
原因一,null不好比较(等号比较不可用,只可用is null 或 is not null);
原因二,null执行效率更低,可用not null default 0 指定默认值
Smallint 同tinyInt用法
2个字节 默认有符号范围-32768~32767; 无符号范围0~65535
Mediumint 同tinyInt用法
3个字节 默认有符号范围-8388608~8388607;无符号范围0~16777215
Int 同tinyInt用法
4个字节 默认有符号范围-2147483648~2147483647; 无符号范围0~4294967295
BigInt 同tinyInt用法
8个字节 默认有符号范围-9223372036854775808-9223372036854775807;无符号范围0~18446744073709551615
Float(m,d) 浮点型
四个字节
float(6, 2)表示共有六位(不加小数点),小数占两位.
mysql中可以指定小数位数,sql server和oracle中是不允许指定小数位数的
Double(m,d) 浮点型
八个字节
double(6, 2)表示共有六位(不加小数点),小数占两位.
mysql中可以指定小数位数,sql server和oracle中是不允许指定小数位数的
Decimal(m,d) 定点型
使用同浮点型,只是更精确。
例:float(9,2) decimal(9,2) 存入1234567.23,float会显示为1234567.25,而decimal会显示1234567.23,更精确。
浮点和定点型是四个字节或八个字节
文本类型:
Char char(M),M代表宽度 0 到 255个字符之间
,可容纳的字符数(不是字节,一个字节占八位,一个汉字占两个字节,utf-8的汉字占三个字节),char(8),可存放八个汉字
Varchar 变长 varchar(M) M代表宽度 0 到 65535个字节之间, 大约能存放22000个汉字左右
有1-2个字节来标记真实的长度
Char和Varchar区别:
1、char是定长,varchar是变长
2、char的最大的存储长度是255个字符,这与字符集的设置没有关系;而varchar的最大长度则是与字符集的设置有关的
因此,如果设置的字符集为
latin1:一个字符是一个字节 ----->则能够存储的最大字符数是65532个
gbk:一个字符是两个字节------->则能够存储的最大字符数是65532/2个
utf-8:一个字符是三个字节------->则能够存储的最大字符数是65532/3个
char定长:M个字符,如果存的小于M个字符,实占M个字符,用空格补齐
varchar变长:M个字符,存的小于M个字符,设为N,N <= M,实占N个字符
3、利用率
类型 宽度 可存字符 实存字符(i<=M)实占空间利用率
char(M) M M i M i/M <= 100%
varchar M M i i字符+(1-2)字节 i/(i + 1-2) <= 100%
char有可能等于百分百,例: 四位学号char(4),利用率为100%;varchar利用率永远小于100%
4、char的速度快于varchar
text:是文本类型 能够存储比较大的数据 但是搜索的速度比较慢,没有全文索引 没有宽度 加了也没用
因此 如果不是比较大的数据 则建议采用char或者varchar来进行查询
日期类型:
年 year
日期 date
时间 time
日期时间 dateTime
时间戳 timeStamp
year类型 一个字节 表示 1901-2155[0000,表示错误时选择]
如果输入2位,'00-69' 表示 2000-2069年 加2000 计算机的元年是从1970年开始
'70-99' 表示 1970-1999年 加1900
推荐输入四位
Date类型 典型格式 1992-08-12
存储的范围:'1000-01-01'-->'9999-12-31'
time时间类型 典型格式 hh-mm-ss
存储的范围: '-838:59:59'-->'838:59:59'
dateTime日期时间类型 典型格式 '1992-09-28 12:23:23'
存储的范围: '1000-01-01 00:00:00'-->'9999-12-31 23:59:59'
timeStamp时间戳类型
是1970-01-01:00:00:00,到当前的秒数
计算很精确,也可以方便的格式化
注意:真正开发中,很少用日期时间类型来表示一个需要精确到秒的列,而是用时间戳类型来表示
原因:虽然日期时间类型能精确到秒,并且方便查看,但是遇到边界日期计算时很麻烦,不精确,像平年和闰年2月