MySQL三大列类型
数值型
- 整型
- Tinyint
- 占据空间:1个字节(8个位);范围:-128 ~127或者 0 ~ 255
- Smallint
- Mediuint
- Int
- bigint
- 小数型 (浮点型和定点型)
- Float(M,D) decimal(M,D)
- M指“精度”,代表总位数
- D指“标度”,代表小数位
- 浮点数占的空间范围是 : 10^ 38 , 10^-38
- 如果M<=24,占4个字节,否则占8个字节
- 用来表示数据中的小数,除了float……浮点
- 还有另外一种定点类型decimal,指把整数部分和小数部分分开存储,比float精确
字符串型
- Char(M)
- Varchar(M)
- Text 文本类型
- blob
日期时间类型
- Date 日期
- Time 时间
- Datetime 时间时间类型
- Year 年类型
一、整型
1、分析:
2个字节,16位 0 – 2^16 = 65535
-2 ^ 15 ----> +2 ^ 15 - 1 , -32768 -->32767
一般而言,设某类型N字节
N字节 , 8N位
0 —> 2^8-1
-2^(8N-1) —> +2 ^(8N-1)-1
int系列的声明时的参数:
(M),unsigned,zerofill
2、举例学习tinyint的参数并验证字节与范围的关系
- 为其插入数据,age到底是属于范围(-127,128)还是(0,255)
经过以上测试,age的范围是(-128,127),即tinyint不加特殊说明,默认范围是(-128,127)
#加上unsigned表示无符号,可以影响存储范围(例:增加一个学分列)
如图所示,增加了一个unsigned
测试其范围:
因此在增加unsigned表示其为无符号类型。
3、分析M函数和zerofill的关系
对比一下例子,引出zerofill(零填充):
综合以上,M函数和zerofill配合使用。
例如,增加一个学号字段,学号不能为负数,学号位数一般相同,即使不同,也会通过补充0进行补位:000013和012345
由图可知,M代表补0的宽度,和zerofill配合使用才有意义
观察snum的类型可知,zerofill则必是unsigned类型
4.小数型
浮点数在计算机中表示是比整数型(int)较复杂的:IEEE
123.45
6.45
小数点左右各可以存储多少位数?
添加奖金列:
测试范围:
证明bonus是unsigned类型,不能为负数
三、对比float和decimal:
#通过以上对比可以看出float有时会损失精度,如果像账户等敏感字段,建议使用decimal
二、字符串型
char和varchar分别称为定长字符串和变长字符串
1.对比char和varchar:
char(N)的优点:反应速度快,但是如果不够指定长度(N),实际上都占用N个长度,
且通过在尾部补充空格的方式进行补齐。(N代表一个N个字符长度)
varchar不需要用空格补齐,但是列内容前有1–2个字节存储字符串列的内容长度。
即保存时用一个字节或者两个字节长的前缀+数据,如果varchar列声明的长度大于255,长度前缀是2
注意:char(M)和varchar(M)中的M 限制是字符数,不是字节数
utf8中,汉字占2–4个字节不等,常用字占3个字节,英文字母占1一个字节,若M=6,则存储空间为18个字节
2. TEXT:文本类型,可以存储比较大的文本字段,搜素速度较慢
因此,如果不是特别大的内容,建议使用char或者varchar代替
text不用加默认值
3.blob 是二进制类型,可以存储图像,音频等二进制信息
意义:二进制 0—255都可能出现
Blob在于防止因为字符集的问题,导致信息丢失
比如一张图片有0xFF字节,这个在ASCII字符集中非法,在入库时会被过滤引起信息被损坏。
三、日期/时间型
1.日期型(date)
1.1存储范围
1.2 存储年-月-日
- 存储默认的字符集是gbk,若出现一下错误,可通过语句set names gbk进行处理
2.时间类型
2.1 时间类型例子
每日签到,记录签到时间
3.日期时间类型
3.1 格式:YYYY-MM-DD HH: II:SS
3.2 举例
另:timestamp
4. Year类型
范围是1901-----2155
以上显示超出范围,year只占一个字节,最多存储255种变化(在某个基础上增加255),如果存储存在错误,说明可以存出一个错误年份’0000’
year类型还可以简写成两位