本系列基于5.7.20 版原本讲述MySQL的新特性,从安装,文件结构,SQL ,优化 ,运维层面 复制,等几个方面展开介绍5.7 的新特性和功能,同时也建议你们跟踪官方blog和文档,以尽快知悉其新的变化。html
1 SQL_MODE的变化mysql
5.7版本默认设置SQL_MODE为"ONLY_FULL_GROUP_BY, STRICT_TRANS_TABLES, NO_ZERO_IN_DATE, NO_ZERO_DATE, ERROR_FOR_DIVISION_BY_ZERO, NO_AUTO_CREATE_USER, NO_ENGINE_SUBSTITUTION"sql
master (none) 09:44:16> show variables like 'sql_mode'; +---------------+-------------------------------------------------------------------------------------------------------------------------------------------+ | Variable_name | Value | +---------------+-------------------------------------------------------------------------------------------------------------------------------------------+ | sql_mode | ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION | +---------------+-------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.07 sec)
看着这么多的值不少DBA小伙伴是否是眼前一亮,这里说一下我测试过程当中遇到的“坑”,其余的须要各位去探索。 shell
STRICT_TRANS_TABLES 意思是说要存储的字段的长度大于字段定义的大小,直接报错而非像5.6版本以及以前,截断数据进行存储,同时抛出一个warning。app
NO_AUTO_CREATE_USER 意思是不能像5.6 那样经过grants建立用户并赋权了,而是像Oracle那样,先create user,而后再对帐号进行赋权。运维
5.7 对于null,'00000000 00:00:00' 这类default值的影响.工做中遇到不少开发的同窗喜欢用'00000000 00:00:00'来做为默认时间,在5.6 版本以前能够,可是在5.7版本中会有必定的问题。ide
注意: 升级版本的时候 确保sql_mode 向前兼容,不然会和开发哥哥吵起来。测试
详细了解SQL_MODE 请移步《sql_mode官方文档》[2]优化
2 online ddl支持 rename index namespa
我的感受这个功能比较不怎么实用,一般改变索引名称的时候,索引中的字段也须要调整,单独修改索引的状况比较少。
mysql> alter table yy rename index idxname to idxnm; Query OK, 0 rows affected (0.01 sec) Records: 0 Duplicates: 0 Warnings: 0
3 新增内置的full text 插件,支持中文 ,韩文,日文全文索引。 以前的版本 只能依赖单词之间空格进行分词,对于依赖于语义分词而非空格分词的其余语言种类,5.7 版本的引入支持解析中文,韩文,日文的全文索引--ngram full-text parser解决了该问题。具体请移步《ngram Full-Text Parser》
[1] https://dev.mysql.com/doc/refman/5.7/en/mysql-nutshell.html
[2] https://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sql-mode-changes