字符类型
分类
- char 定长 char(4) 不够则空格补全, 超过四个字符报错
- varchar 变长 varchar(4) 不够有几个要几个, 超过报错
验证
create table t18(name char(4)); create table t19(name varchar(4)); insert into t18 values('a'); insert into t19 values('a'); select char_length(name) from t18; select char_length(name) from t19;
验证失败解决方法
# 加上下边这句(取消底层优化) set global sql_mode='strict_trans_tables,pad_char_to_full_length'; # 重启mysql, 重复上述验证操作即可验证成功
char与varchar对比
- char 浪费空间, 存取简单
- varchar 节省空间, 存取较为复杂(需要制作报头, 标识真正数据量大小)
- 为防止大量的浪费, 现在用varchar的越来越多
时间类型
分类
- date: 年月日 2022-4-9
- time: 时分秒 11:11:11
- datetime: 年月日时分秒 2022-4-9 11:11:11
- Year: 2022
代码试验
create table student( id int, name varchar(16), born_year year, birth date, study_time time, reg_time datetime # 这儿不能加逗号 ); # 需要1970之后 insert into student values(1,'matrix','1970','1970-11-11','11:11:11','2022-11-11 11:11:11');
枚举与集合类型
分类
- 枚举 enum 多选一 [学个单词: 枚举 enumerate]
- 集合 set 多选多
代码试验
create table user( id int, name char(16), gender enum('male','female','others') ); insert into user values(1,'jason','male'); # 正常 insert into user values(2,'egon','xxoo'); # 报错 # 枚举字段 只能从整个枚举对象里面选择一个存储 create table teacher( id int, name char(16), gender enum('male','female','others'), hobby set('read','DBJ','hecha') ); insert into teacher values(1,'jason','male','read'); # 正常 insert into teacher values(2,'egon','female','DBJ,hecha'); # 正常 insert into teacher values(3,'tank','others','生蚝'); # 报错 # 集合可以选多个, 也可以只写一个, 但是不能写没有列举的
Over !