严格模式
char() 宽度默认为1 添加数据的时候他会自动截取1位来 存 (能尽量少干活就少干活 )
还有一种情况就是 他会自动报错 我们应该给他报错
模糊匹配
查看 严格模式 show variables like"%mode%"; 只要是带mode的都给我查出来
%匹配任意多个字符
_匹配任意一个字符
两种方式
set session 临时有效 只在你当前操作窗口有效
set session sql_mode='STRICT_TRANS_TABLES';
set global 全局有效 终身有效
set global sql_mode='STRICT_TRANS_TABL ES' 设置完之后需要退出客户端 从新进入
浮点型
浮点型
float(255,30) 总共255位 小数部分占30位
double(255,30) 总共255位 小数部分占30位
decimal(65,30) 总共65位 小数部分占30位
create table t12(id FLOAT(255,30));
create table t13(id DOUBLE(255,30));
create table t14(id DECIMAL(65,30));
insert into t12 values(1.111111111111111111111111111111);
insert into t13 values(1.111111111111111111111111111111);
insert into t14 values(1.111111111111111111111111111111);
精确度
float < double < decimal
字符类型(***)
分为两类 char (4) 最大 四个字符 超出 直接报错 少了用空格填充
varchar(4) 最大 四个字符 超出 直接报错 少了有几个存几个 (节省空间)
char_length() 查看长度 select char_length(name) from t16;
mysql在存储char类型字段的时候 硬盘上确确实实存的是固定长度的数据
但是再取出来的那一瞬间 mysql会自动将填充的空格去除
可以通过严格模式 来修改该机制 让其不做自动去除处理
# 如果不想让mysql帮你做自动去除末尾空格的操作,需要再添加一个模式
set global sql_mode="strict_trans_tables,PAD_CHAR_TO_FULL_LENGTH";
char与varchar的区别
char定长
1.浪费空间
2.存取速度快
varchar变长
1.节省空间
2.存取速度慢(较于char比较慢)
存的时候 需要给数据讲一个记录长度的报头
取的时候 需要先读取报头才能读取真实数据
char(4) varchar(4)
取的时候方便 取的时候比较繁琐了 无法知道数据到底多长
直接按固定的长度取即可
日期类型
* date:2019-05-01
* time:11:11:11
* Datetime: 2019-01-02 11:11:11
* Year:2019
create table student( id int, name char(16), born_year year, birth date, study_time time, reg_time datetime ); insert into student values(1,'egon','2019','2019-05-09','11:11:00','2019-11-11 11:11:11'