MySQL数据类型笔记

整型

  • TINYINT
  • SMALLINT
  • MEDIUMINT
  • INT/INTEGER
  • BIGINT

类型(宽度):指的是查询的显示宽度,而非存储宽度,存储宽度随类型而定,不写宽度的时候,默认是类型的最大值显示的宽度值

时间类型

案例

create table student (
	id int,
	name char(6),
	born_year year,
	birth_date date,
	class_time time,
	reg_time datetime
);

# 会默认以其对应的格式内容插入
insert into student values(1, 'egon',  now(), now(), now(), now());

datetime和timestamp的区别

  1. datatime的日期范围是1001 - 9999年,timestamp的时间爱你范围是1970 - 2038年
  2. datetime占据8个字节,timestamp占据4个字节
  3. datetime存储时间与时区无关,timestamp存储时间与时区有关

字符类型

  • char:定长
  • varchar:变长

案例

# 宽度指的是字符的个数
create table t1(name char(5));

create table t2 (name varchar(5));

insert into t1 values('李杰'); # '李杰    ' 补全到3个空格到5个宽度

insert into t2 values('李杰'); # '李杰' 有多少存多少

# 查看存储的长度
select char_length(name) from t1; # 2 mysql char取的时候会自动去除空格

select char_length(name) from t2; # 存的是2个,取的也是2个

修改mysql的模式,来查询char的存储长度

set sql_mode = 'PAD_CHAR_TO_FULL_LENGTH';

mysql查询的时候,char补全空格的,查询的会自动去除空格进行查询

select name from t1 where name = '李杰'; # 有空格还是无空格的都能查

# 末尾去空格查询只适用等号,不适用like
select name from t1 where name like '李杰'; 

末尾去空格查询只适用等号,不适用like

varchar 还会用一个字节存储数据的长度

length: 查看字节数
char_length: 查看字符数
  1. char填充空格来满足固定长度,但是在查询时会很不要脸的删除尾部的空格(装作好像自己没有浪费过空间一样),然后更改 sql_mode 让其显出原形。
    1. 存取数据很快
    2. 浪费空间
  2. varchar
    1. 更加节省空间,存数据更精准
    2. 存取数据比较慢,得先获取头

大部分场景使用char,存储空间不是一种限制了。建表时尽量的把定长的数据往前放,变长的数据往后放。

枚举类型和集合类型

字段的值只能在给定的范围中选择,如:单选框,多选框

enum 单选,只能在给定的范围内选一个值,如:性别

set 多选,在给定的范围内可以选择一个或多个的值 如:爱好

案例

create table consumer (
	id int,
	name char(16),
	sex enum("male", "female", "other"),
	level enum('vip1', 'vip2', 'vip3'),
	hobbies set('play', 'music', 'read', 'run')
);

insert into consumer values (1, 'egon', 'male', 'vip1', 'music,read')

set插入数值是,引号内多个值以逗号隔开

如果传入不在范围之内的,插入之后查询结果为空

额外补充

加入命令行的模式下,输入的sql语句打错了或者最后一句输入了一个逗号而不是分号;

可以输入 c 终止运行