MySQL 允许在 my.cnf 文件中将参数 SQL_MODE 设置为多个值。但是,无论您使用基于浏览器的控制台还是 CLI 工具,Amazon RDS 都只允许一个值。
我找到了一个(也许不是完美的)解决方案来解决无法将 SQL_MODE 设置为多个值的问题。在下面的过程中,我展示了我的设置。您可以选择您认为与您的环境相关的任何值。
1) 在您的 parm 组中,设置 SQL_MODE = TRADITIONAL (或哪个值是您的最高优先级)
2) 在您的 parm 组中,将 init_connect 设置为:
设置会话 sql_mode = '传统,忽略_空间,无引擎_替换,仅_完整_组_BY'
现在,当客户端登录到数据库时,其会话 SQL_MODE 应设置为 init_connect 字符串传入的所有值。就我而言,这相当于:IGNORE_SPACE、ONLY_FULL_GROUP_BY、STRICT_TRANS_TABLES、STRICT_ALL_TABLES、NO_ZERO_IN_DATE、NO_ZERO_DATE、ERROR_FOR_DIVISION_BY_ZERO、TRADITIONAL、NO_AUTO_CREATE_USER、NO_ENGINE_SUBSTITUTION
注意:设置 init_connect 值后对其进行编辑涉及剪切粘贴。然而,我发现在设置 init_connect 值后尝试删除它是一个很大的麻烦,所以在使用它时要小心。麻烦吗?要在设置后删除 init_connect 值,需要我从头开始创建一个新的 parm 组,将除 init_connect 之外的所有值设置为原始 parm 组的值,删除原始 parm 组,然后使用旧名称重命名新组。 Firefox 和 Chrome 都是如此。我也无法使用 CLI 工具 (aws rdsmodify-db-parameter-group) 删除该值。
虽然这不是这篇文章的一部分,但如果有人回答如何删除/重置/清空 init_connect 而没有我上面描述的那种麻烦,那就太好了。
更新1:
没关系。我发现 init_connect 设置(在 RDS 上)将无法在数据库重新启动后继续存在。因此,我上面提供的解决方案不起作用。
另外,由于无法通过控制台删除(删除) init_connect 设置(为什么不呢?),因此可以使用aws rds 重置数据库参数组CLI 命令而不是像我之前描述的那样重建整个参数组。
我对 Amazon RDS 感到非常失望:
- 不允许多个 SQL_MODE 值。
- 不允许我们通过控制台删除 init_connect 设置。
更新2:
根据 Ross Scrivener 的回复,我测试了通过 AWS 控制台设置多个 SQL_MODE 值。我使用了值“TRADITIONAL、IGNORE_SPACE、ONLY_FULL_GROUP_BY”(无空格)。然后我重新启动了服务器两次,一切似乎都成立了。
感谢 Amazon 解决了这个问题,并感谢 Ross Scrivener 指出了 AWS 的更改。