一、常见的数据类型
数值型:整型、小数(定点数、浮点数)
字符型:较短的文本(char 、varchar )、较长的文本(text 、blob ( 较长的二进制数据) );
日期型:
1. 整型
tinyint 、 smallint 、 mediumint 、 int / integer 、 bigint
1 ( 字节) 2 ( 字节) 3 ( 字节) 4 ( 字节) 8 ( 字节)
特点:
① 如果不设置无符号还是有符号, 默认是有符号, 如果设置无符号, 需要添加unsigned
② 如果插入的数值超出了整型的返回,会直接报错(有的版本会报警告, 并插入临界值)
③ 如果不设置长度, 会有默认的长度
长度代表了显示的最大宽度,如果不够会用 0 在左边填充, 但必须搭配zerofill关键字使用!
如何设置有符号还是无符号
drop table if exists 表名;
create table 表名(
字段1 int ,
字段2 int unsigned
) ;
2. 小数
一、浮点型
float ( M, D) ;
double ( M, D) ;
二、定点型
dec ( M, D) ;
decimal ( M, D) ;
特点:
① M : 整数部位 + 小数部位
D : 小数部位 如果超过范围, 则插入失败
② M 和 D 都可以省略 如果是decimal , 则 M 默认是10 , D 默认是0 ; 如果是float 和 double ,
则会根据插入的数值的精度来决定精度
③ 定点型的精度相对较高, 如果要求插入数值的精度较高( 如:货币运算等) 则优先考虑使用
测试 M 和 D
create table tab_float(
f1 float ( 5 , 2 ) ,
f2 double ( 5 , 2 ) ,
f3 decimal ( 5 , 2 )
) ;
insert into tab_float values ( 123.45 , 123.45 , 123.45 ) ;
insert into tab_float values ( 123.456 , 123.456 , 123.456 ) ;
insert into tab_float values ( 1523.4 , 1523.4 , 1523.4 ) ;
3.字符型
较短的文本: char varchar
较长的文本: text blob ( 较大的二进制)
其他:
binary 和varbinary 用于保存较短的二进制
enum 用于保存枚举
set 用于保存集合
特点(char 和varchar 的区别):
char char ( M) (M可以省略, 默认为1 ) 固定长度的字符 比较耗费空间 效率高
varchar varchar ( M) (M不能省略) 可变长度的字符 比较节省空间 效率低
M: 代表是最大的字符数(注意:是字符数,不是字节数)
插入枚举类型
create table tab_char(
c1 enum ( "a" , "b" , "c" )
) ;
insert into tab_char values ( "a" ) ;
insert into tab_char values ( "A" ) ;
insert into tab_char values ( "d" ) ;
set(集合)类型: 和 enum 类型类似,但是set一次可以选取多个成员,而enum只能选一个,根据成员个数不同,存储所占的字节也不同
create table tab_set(
s1 set ( "a" , "b" , "c" , "d" )
) ;
insert into tab_set values ( "a" ) ;
insert into tab_set values ( "a,b" ) ;
insert into tab_set values ( "a,c,d" ) ;
4. 日期型
分类:
date 只保存日期
time 只保存时间
year 只保存年
datetime 保存日期 + 时间
timestamp 保存日期 + 时间
特点: 字节 范围 时区等的影响
datetime 8 1000 - 9999 不受
timestamp 4 1970 - 2038 受
create table tab_date(
t1 datetime ;
t2 timestamp ;
) ;
insert into tab_date values ( now ( ) , now ( ) ) ;
select * from tab_date;