/**
燕十八 公益PHP培训
课堂地址:YY频道88354001
学习社区:www.zixue.it
**/
=====================
数值型
=====================
1、整型
①tinyint
占据空间: 1 字节
存储范围:-128[-2^7]->127[2^7-1] 【有符号】, 0->255[2^8-1] 【无符号】
备注:
计算机为了表示一个数是负数,会把最高位[左侧]的0/1,当成符号来看
如果0 ->则是整数;
如果1 ->则是负数
0 0000000 -->+0
0 1111111 -->+127
1 0000000 -->-0
1 1111111 -->-127
二进制补码问题
②smallint
占据空间: 2 字节
存储范围:-2^15->2^15-1 ; 0->2^16-1
③mediuint
占据空间: 3字节
存储范围:-2^23->2^23-1 ; 0->2^24-1
④int
占据空间: 4 字节
存储范围:-2^31->2^31-1 ; 0->2^32-1
⑤bigint
占据空间: 8 字节
存储范围:-2^63->2^63-1 ; 0->2^64-1
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 默认:有符号
+ unsigned:表示无符号,可以影响存储范围
+ zerofill:zero是零,fill是填充,代表0 如:[000123]
+ 例:alter table table_name add s_num smallint(5) zerofill not null default 0;
+ ①zerofill则同时必是unsigned
+ ②如 int(M), zerofill填充的长度为M 如:int(5)--> [00000]
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2、浮点型/定点型
①float(M, D)
M叫"精度"----->代表"总位数",
D叫"标度" ----->代表"小数位" 小数点右边的位数
占据空间: 4 字节
存储空间:10^38
当M<=24时,占4个字节<float> [0到23的精度对应FLOAT列的4字节单精度]
否则,占8个字节<double> [24到53的精度对应DOUBLE列的8字节双精度]
②decimal(M, D)
把整数部分,和小数部分,分开存储 ,比float精确,float有损精度
银行系统用decimal
占据空间: 8 字节
存储原理:
小数点 前面的数据 用四个字节存储
小数点 后面的数据 用四个字节存储
一共8个字节
=====================
文本型
=====================
①char(M)[定长]
M代表宽度:0<=M<=255之间
char型,如果不够M个字符,内部用空格不起,取出时再把[右侧空格]删掉
注意:如果存储时,右侧本身有空格,将会丢失
定长速度快
②varchar(M)[变长]
M代表宽度:0<=M<=65535之间(以ascii字符为例, utf8 22000左右)
存储的字符串规则:前缀[数据的实际长度]+数据
分配空间大小:分配的空间为实际存储的长度 而char为M的长度
③text[没有默认值 即:default '']
BLOB和TEXT列[不能]有 默认值
④blob[二进制类型]
存储图像、音频等二进制信息
也可以存储 字符串
blob在于防止因为字符集的问题,导致信息丢失
比如:一张图片中有0xFF字节,这个在ascii字符集认为非法,在入库的时候,被过滤
=====================
日期型
=====================
①date
YYYY-mm-dd
4个字节
1000-01-01<->9999-12-31
②time
HH:ii:ss
3个字节
-838:59:59<->838:59:59
③datetime
8个字节
YYYY-mm-dd HH:ii:ss
④year
YYYY和YY
1个字节
四位字符串,范围为'1901'到'2155'。
两位字符串,范围为'00'到'99'
非法YEAR值被转换为0000
⑤timestamp
'YYYY-MM-DD HH:MM:SS'
4个字节
TIMESTAMP列用于INSERT或UPDATE操作时记录日期和时间
如果你不分配一个值,表中的第一个TIMESTAMP列自动设置为最近操作的日期和时间
也可以通过分配一个NULL值,将TIMESTAMP列设置为当前的日期和时间
CREATE TABLE test (
ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
系统常量:CURRENT_TIMESTAMP 取得当前系统时间
【时间戳】。范围是'1970-01-01 00:00:00'到2037年。