数据库常见数据类型
一.数值型
1.整型
类型名 | 范围 | 存储字节大小 |
---|---|---|
bigint | -263 ~ 263-1 | 8 |
int | -231 ~ 231-1 | 4 |
mediumint | -8388608~8388607 | 3 |
smallint | -215 ~ 215-1 | 2 |
tinyint | 0~255 | 1 |
ps:无符号(unsigned)的范围是:0~(正数+负数的绝对值)
特点:
① 如果不设置无符号还是有符号,默认是有符号,如果想设置无符号,需要添加unsigned关键字。(有unsigned时,插入负数会报错)
② 如果插入的数值超出了整型的范围(不是长度,是上表中的范围!!),会报out of range异常,并且插入临界值。
③ 如果不设置长度,会有默认的长度;长度代表了显示的最大宽度,超出长度会报错;如果在后面添加zerofill,那么会在长度不够指定长度时,用0进行左填充。(ps:有zerofill的时候,不能插入负数)
DROP TABLE IF EXISTS tab_int;
CREATE TABLE tab_int(
t1 INT(7) ZEROFILL, #7就是设定的长度
t2 INT(7) UNSIGNED
);
2.小数
分类:
1.浮点型
float(M,D)
double(M,D)
2.定点型
dec(M,D)
decimal(M,D)
特点:
①
M:整数部位+小数部位
D:小数部位
如果超过范围,则插入临界值
②
M和D都可以省略
如果是decimal,则M默认为10,D默认为0
如果是float和double,则会根据插入的数值的精度来决定精度
③
定点型的精确度较高,如果要求插入数值的精度较高如货币运算等则考虑使用
DROP TABLE IF EXISTS tab_float;
CREATE TABLE tab_float(
f1 FLOAT,
f2 FLOAT(5,2),
f3 DECIMAL,
f4 DECIMAL(5,2)
);
INSERT INTO tab_float VALUES (100.237,100.237,100.237,100.237);
SELECT * FROM tab_float;
f1:float并且没有设置M,D,所以输入多少,表中就是多少
f2:float,M=3,D=2。则整数部分最多3位(即最大百位),小数部分2位
f3:decimal ,并且没有设置M,D。则M默认为10,D默认为0
f4:decimal,M=5,D=2.则整数部分最多3位,小数部分2位。
(个人感觉,设置了MD后,float和decimal好像没有什么区别)
二.字符型
1.较短的文本
名称 | 写法 | M的意思 | 特点 | 空间耗费 | 效率 |
---|---|---|---|---|---|
char | char(M) | 最大的字符数,可以省略,默认为1 | 固定长度的字符 | 比较耗费 | 高 |
varchar | varchar(M) | 最大的字符数,不可以省略 | 可变长度的字符 | 比较节省 | 低 |
2.较长的文本
text,blob
3.其他
binary和varbinary用于保存较短的二进制
enum用于保存枚举
set用于保存集合
enum:
CREATE TABLE tab_char(
c1 ENUM('a','b','c')); #则c1这一列只能保存‘a’或‘b’或‘c’(可以有重复)
set:
CREATE TABLE tab_set(
s1 SET('a','b','c','d')
);#每行插入的字符只能是a\b\c\d的组合(用逗号隔开),插入表格时,重复的只记一次,并且按set中的顺序排列
INSERT INTO tab_set VALUES('a');
INSERT INTO tab_set VALUES('A,B');
INSERT INTO tab_set VALUES('a,c,d');
INSERT INTO tab_set VALUES('D,C,D');
三.日期型
分类:
date只保存日期
time 只保存时间
year只保存年
datetime保存日期+时间
timestamp保存日期+时间
名称 | 字节 | 范围 | 是否受时区影响 |
---|---|---|---|
datetime | 8 | 1000-9999 | 不受 |
timestamp | 4 | 1970-2038 | 受 |
上一篇: react native 页面跳转
下一篇: 【linux】配置静态IP地址