一、整型
整型包括:tinyint, smallint, int, bigint
区别是存储数据的范围不一样
# 验证:默认情况带不带符号 create table t5 (id tinyint); create table t5 (id int); insert into t5 (id) values (-129), (128);
'''结论:默认带符号'''
注意:整型的存储大小取决于类型,而不取决于括号里面的数字,而字符串的话是取决于括号里面的数字。(eg: varchar(32))
二、浮点型
float(255, 30) # 代表总共255位,小数占30位 double(255, 30) # 代表总共255位,小数占30位 decimal(65, 30) # 代表总共65位,小数占30位
# 区别:
# 精度不一样
# decimal > double > float
# 验证 create table t6 (id float(255, 30)); create table t7 (id double(255, 30)); create table t8 (id decimal(65, 30)); # 插入数据 insert into t6 values (1.11111111111111111111111); insert into t7 values (1.11111111111111111111111); insert into t8 values (1.11111111111111111111111);
三、字符串
char(4) #
# 字符串类型,存储的范围是4个字符,超过了直接报错,不超过按照4个字符存
varchar(4)
# 字符串类型,存储的范围是4个字符,超过了直接报错,不超过有几个存几个
# 验证 create table t9 (id int, name char(4)); create table t10 (id int, name varchar(4)); # 插入数据 insert into t9 (id, name) values(1, 'kevin'); insert into t10 (id, name) values(1, 'kevin');
四、日期
datetime 年月日,时分秒(一般用这种)
date 年月日
time 时分秒
year 年份
# 验证 create table t11 (id int, reg_time datetime, reg1_time date, reg2_time time, reg3_time year ); # 插入数据 insert into t11 values(1, '2022-1-1 11:11:11', '2022-01-02', '11:11:11', '2022');
五、枚举和集合
枚举:多个里面选一个
# 验证 create table t12 ( id int, gender enum('男', '女', 'other') ); insert into t12 values (1, '男');
集合:多个里面选多个
# 验证 create table t13 ( id int, hobby set('music', 'read', 'xj') ); insert into t13 values (1, 'music');
六、严格模式
1、 查看mysql的sql_mode
show variables like '%mode%';
2、设置严格模式
1. 直接使用命令修改
set global sql_mode='STRICT_TRANS_TABLES';
set global sql_mode='STRICT_TRANS_TABLES,ONLY_FULL_GROUP_BY';
2. 配置文件修改
在my.cnf添加如下配置 [mysqld] sql_mode='ONLY_FULL_GROUP_BY,NO_AUTO_VALUE_ON_ZERO,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE, NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,PIPES_AS_CONCAT,ANSI_QUOTES'
MySQL5.6和MySQL5.7默认的sql_mode模式参数是不一样的,5.6的mode是NO_ENGINE_SUBSTITUTION,
其实表示的是一个空值,相当于没有什么模式设置,可以理解为宽松模式。5.7的mode是STRICT_TRANS_TABLES,也就是严格模式。