create table t2(id int unsigned)无符号类型;
create table t3(id int(括号内是屏幕的显示位数) zerofill);
定点数类型 dec等同于decimal
浮点类型 float double
float (m,d)[unsigned][zerofill] m是数字总数,d是小数总数,m最大是255,d最大是30
double (m,d)[unsigned][zerofill] m是数字总数,d是小数总数,m最大是255,d最大是30
decimal(m,d)[unsigned][zerofill] m是数字总数(符号不算),d是小数总数,m最大是65,d最大是30
create table t1(id int,name char(20),birth_year year,birthday date,class_time time,reg_time datetime);
1 | tang | 2022 | 2022-06-30 | 11:16:35 | 2022-06-30 11:16:35
datetime与timestamp的区别
datetime是1001-9999年 timestamp是1970-2038年
datetime存储时间与时区无关,而timestamp与时区有关
datetime使用8字节,timestamp则是4个字节
datetime默认值是null,timestamp不是,默认是当前时间
char 定长
varchar 变长
select char_length(name) from t1; # 查询字符数(char 默认会将末尾的0删除)
如果想要char不删除多余的0,需要在mysql命令行进行配置
SET sql_mode = ‘PAD_CHAR_TO_FULL_LENGTH’;
那么在查询方面还是存储方面的话,能用char就不用varchar,一些存进去就不常用的数据可以用varchar
varchar无论是查询方面还是存储方面都比不上char,仅仅只是在存储大小方面比char要更节省罢了
eg:
char类型的存储
char(5) 可以看到因为固定长度的关系所以说看的很清晰
** |**|||***|
varchar类型的存储
varchar(5) 可以看到varchar存储的时候因为没固定长度的说法所以看着很乱,它自己搞了一个头部用来存放字符的大小,所以说查询的时候就很麻烦,要先查看这个字节数,再查你需要的数据
(字节数)(数据)(字节数)(数据)(字节数)(数据)
enum 单选
set 多选
mysql> create table student(id int,name char,age int,sex enum(‘male’,‘female’,‘other’),hobby set(‘football’,‘basketball’,‘swim’));
Query OK, 0 rows affected (0.03 sec)
mysql> desc student;
±------±------------------------------------±-----±----±--------±------+
| Field | Type | Null | Key | Default | Extra |
±------±------------------------------------±-----±----±--------±------+
| id | int(11) | YES | | NULL | |
| name | char(1) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
| sex | enum(‘male’,‘female’,‘other’) | YES | | NULL | |
| hobby | set(‘football’,‘basketball’,‘swim’) | YES | | NULL | |
±------±------------------------------------±-----±----±--------±------+
5 rows in set (0.01 sec)
mysql> insert into student values(1,‘‘,23,’‘,’***’);
Query OK, 1 row affected, 3 warnings (0.01 sec)
mysql> select * from student; 可以看到输入没有的数据,枚举和集合这块都是空值,不会报错
±-----±-----±-----±-----±------+
| id | name | age | sex | hobby |
±-----±-----±-----±-----±------+
| 1 | * | 23 | | |
±-----±-----±-----±-----±------+
1 row in set (0.00 sec)
mysql> insert into student values(2,‘*’,23,‘male’,‘football’);
Query OK, 1 row affected (0.01 sec)
mysql> select * from student;
±-----±-----±-----±-----±---------+
| id | name | age | sex | hobby |
±-----±-----±-----±-----±---------+
| 1 | * | 23 | | |
| 2 | * | 23 | male | football |
±-----±-----±-----±-----±---------+
2 rows in set (0.00 sec)