数据库的列类型
数值
类型 | 介绍 | 大小 | 范围 |
---|---|---|---|
tinyint | 十分小的数据 | 1个字节 | 2 − 7 2^{-7} 2−7—— 2 − 7 − 1 2^{-7}-1 2−7−1 |
smallint | 较小的数据 | 2个字节 | 2 − 15 2^{-15} 2−15—— $2^{15}-1 |
mediumint | 中大小数据 | 3个字节 | 2 − 23 2^{-23} 2−23—— $2^{23}-1 |
int | 标准的整数 | 4个字节 | 2 − 31 2^{-31} 2−31—— $2^{31}-1 |
bigint | 较大的数据 | 8个字节 | 2 − 63 2^{-63} 2−63—— $2^{63}-1 |
float | 浮点数 | 4个字节 | 3.402823e+38 ~ 1.401298e-45 |
double | 浮点数 | 8个字节 | 1.797693e+308~ 4.9000000e-324 |
decimal | 字符串形式的浮点数(用于金融计算的时候) |
注意这里在公司项目时设计金融时使用decimal,因为double和float存在精度丢失问题。
public void testBig(){
System.out.println(0.11+2001299.32);//非精确的输出
BigDecimal bigDecimal1 = new BigDecimal(Double.toString(0.11));
BigDecimal bigDecimal2 = new BigDecimal(Double.toString(2001299.32));
System.out.println(bigDecimal1.add(bigDecimal2));//精确的输出
}
控制台输出:
2001299.4300000002
2001299.43
这就是精度丢失问题,当然在我们还没有多少钱人的眼里觉得没什么,可是在马老板眼里可就是 大大滴坏了。
字符串
类型 | 介绍 | 大小 | |
---|---|---|---|
char | 字符固定大小的 | 0–255 | |
varchar | 可变字符串 | 0–65535 | |
tinytext | 微型文本 | 2 8 − 1 2^8-1 28−1 | 足以存放博客能容 |
text | 文本串 | 2 16 − 1 2^{16}-1 216−1 | 写本书都够啦(保存大文本) |
时间日期
类型 | 形式 | 介绍 |
---|---|---|
date | YYYY-MM-DD | 日期格式 |
time | HH:MM:SS | 时间格式 |
datetime | YYYY-MM-DD HH:mm:ss | 最常用的时间 |
timestamp | 时间戳 | 1970.1.1到现在的毫秒数 |
year | 年份表示 |
null
- 没有值,未知
- 注意不要使用NULL运算。结果为null
数据库字段属性
Unsigned:
- 无符号填充
- 如果声明该列为Unsigned,则不能声明为负数
zerofill:
- 0填充
- 不足的位数补0,例如初始定义int(3),如果存入5的话,则显示005
注意:这里int(3) 3代表的是它的宽度,并不是定义它的范围,int范围是固定的,定义的宽度可以用来补位操作
保存 整数5的话
lg:
int(4) — 0005
int(5) —00005
自增(auto_increment):
- 既自动在一条记录上加1(默认是加1)
- 通常用来设计唯一的主键,(必须是整数类型,因为自增要加数值的嘛)
- 可以定义设计主键自增的起始值和步长
auto_increment_increment=自定义增长步长
auto_increment_offset=自定义起始长度
默认:
- 设计默认的值(既在不加某列的只是自动填充)
这些具体的例子我们下一篇详细说哈
CREATE TABLE `westos`.`Untitled` (
`id` int(3) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '这是id的注释',
`name` int(5) UNSIGNED ZEROFILL NULL DEFAULT 默认 COMMENT '这是name注释',
PRIMARY KEY (`id`)
) ENGINE = InnoDB CHARACTER SET = utf8;