上云无忧 > 文档中心 > 百度智能云云数据库RDS sql_mode参数使用详解之NO_ENGINE_SUBSTITUTION
云数据库 RDS
百度智能云云数据库RDS sql_mode参数使用详解之NO_ENGINE_SUBSTITUTION

文档简介:
MySQL数据库可以通过参数sql_mode来控制数据库的行为,本文介绍sql_mode的取值之一:NO_ENGINE_SUBSTITUTION。它的用途是:当CREATE TABLE或ALTER TABLE之类的语句指定一个已禁用或未编译的存储引擎时,控制默认存储引擎的自动替换。 for MySQL 版
*此产品及展示信息均由百度智能云官方提供。免费试用 咨询热线:400-826-7010,为您提供专业的售前咨询,让您快速了解云产品,助您轻松上云! 微信咨询
  免费试用、价格特惠

背景

MySQL数据库可以通过参数sql_mode来控制数据库的行为,本文介绍sql_mode的取值之一:NO_ENGINE_SUBSTITUTION。它的用途是:当CREATE TABLE或ALTER TABLE之类的语句指定一个已禁用或未编译的存储引擎时,控制默认存储引擎的自动替换。

问题现象

为什么想创建一个FEDERATED引擎的表,结果显示却是InnoDB引擎:

CREATE TABLE tb_01 (
id int(11) NOT NULL AUTO_INCREMENT,
age int(11) NOT NULL DEFAULT '0',
name varchar(64) NOT NULL DEFAULT '',
PRIMARY KEY (id)
) ENGINE=FEDERATED;

执行命令后,显示结果如下:

原因分析

导致以上现象发生需要三方面的因素:

  1. 当前RDS实例不支持FEDERATED引擎,登录数据库执行下面的SQL命令:
SHOW ENGINES;

  1. sql_mode设置中不含NO_ENGINE_SUBSTITUTION,登录数据库执行下面的SQL命令:
SHOW VARIABLES LIKE 'sql_mode';

  1. 当前RDS实例的默认存储引擎是InnoDB,登录数据库执行下面的SQL命令:
SHOW VARIABLES LIKE 'default_storage_engine';

说明:当在sql_mode中不设置NO_ENGINE_SUBSTITUTION,且CREATE TABLE中的ENGINE子句指定的存储引擎不被当前数据库实例支持时,MySQL会把表的引擎改为默认存储引擎(InnoDB)。

解决方案

  • 方案一:给数据库实例安装FEDERATED引擎
  • 方案二:设置sql_mode包含NO_ENGINE_SUBSTITUTION,这样可以给出明确的报错提示避免误解,如下例:

结论建议

从稳定性和性能多方面考虑,针对MySQL数据库中的存储引擎,推荐使用InnoDB引擎,不建议使用其他引擎如:MyISAM、MEMORY等。

相似文档
  • disabled_storage_engines参数是5.7.8版本新引入的参数,它用来设置在CREATE TABLE时被禁用的存储引擎。 举例:创建新表时禁用MyISAM和MEMORY引擎。 [mysqld] disabled_storage_engines="MyISAM,MEMORY" for MySQL 版
  • 客户反馈,应用程序经常会报连接失效需要重新建立连接。连接超时主要由interactive_timeout和wait_timeout影响,本篇文章针对这两个参数进行详细介绍。 for MySQL 版
  • 百度云支持更改数据库innodb_strict_mode设置参数,也可以session级别更改,该参数修改后立即生效,不需要重启实例: innodb_strict_mode=ON,表示使用严格模式,当创建表(CREATE TABLE)、更改表(ALTER TABLE)和创建索引(CREATE INDEX)语句时,如果写法有错误,不会有警告信息,而是直接抛出错误。 for MySQL 版
  • log_timestamps参数是MySQL在5.7.2版本新引入的参数,这个参数主要是控制MySQL的错误日志、慢查询日志、genera log等记录日志的显示时间参数,但不会影响写到表 (mysql.general_log, mysql.slow_log) 中的显示时间。 for MySQL 版
  • 云数据库 RDS(Relational Database Service)是一种专业、高性能、高可靠的云数据库服务,为您提供可靠的数据备份恢复、完备的安全管理、完善的监控、可轻松扩展等功能支持。相对于自建数据库,云数据库 RDS 具有更经济、更专业、更高效、更可靠、简单易用等特点,使您更专注于核心业务。 for MySQL 版 for SQL Server 版 for PostgreSQL 版
官方微信
联系客服
400-826-7010
7x24小时客服热线
分享
  • QQ好友
  • QQ空间
  • 微信
  • 微博
返回顶部