细枝末节
1. 类型选择原则:越简单越小越好
分类
1. 整型
1) tinyint 1字节
2) smallint 2字节
3) mediumint 3字节
4) int/integer 4字节
5) bigint 8字节
2. 小数
1) 定点型
1.DECIMAL(M,D)/DEC(M,D) M+2字节
2) 浮点型
1.float(M,D) 4字节
2.double(M,D) 8字节
3. 字符型
1) 较短文本:char,varchar
2) 较长文本:text,blob(较长的二进制数据)
4. 日期型
整型
备注
1. 默认设置有符号,设置无符号要添加unsigned
2. 如果插入值超出类型范围,会报out of range错误,并且将插入值改为临界值
3. 不设置长度,会有默认长度;设置长度,位数不够时在左边补0,要搭配zerofill使用
4. 使用zerofill默认为无符号
示例
CREATETABLE int_test(
/* int类型 */
t1 int,
/* 无符号int类型 */
t2 int undesigned,
/* 显示长度为5的int类型,位数不够时左边用0填充 */
t3 int(5) zerofill
);
小数
分类
1. 浮点型
1) float(M,D)
2) double(M,D)
2. 定点型
DEC(M,D)/DECIMAL(M,D)
备注
1. M:整数部分+小数部分的位数
2. D:小数部分位数
3. 超过范围,则插入临界值
4. M和D都可以省略,省略时float和double根据数值精度决定;decimal默认M为10,D为0
5. 定点型精度高,一般用于高精度如货币运算
字符型
分类
1.短文本
1) char(M)
2) varchar(M)
其他:
binary和varbinary用于保存较短的二进制
enum用于保存枚举
set用于保存集合
2. 长文本
1) text
2) blob
备注
1. M:该字段的值最长字符数
2. char表示固定长度字符,存在内存浪费,效率高,M可省略默认为1
3. vachar表示可变长度字符,节省内存,效率低,M不可省略
日期型
分类
1.date,只有日期
2.time,只有时间
3.year,只有年份
4. datetime,date+time
5. datestamp,
备注
1. timestamp范围:19700101080001~2038年某个时间
2. datetime范围:1000-1-1~9999-12-31
3. timestamp受时区和MySQL版本影响
4. datetime只能反映出插入时的当地时区