更新:此问题已修复。。。请参见下文。
对于无法将SQL_MODE设置为多个值的问题,我找到了一个(也许不是完美的(解决方案。在下面的过程中,我将显示我的设置。你可以选择任何你认为与你的环境相关的价值观。
1( 在您的parm组中,设置SQL_MODE=TRADINAL(或者哪一个值是您的最高优先级(
2( 在parm组中,将init_connect设置为:设置会话sql_mode="传统,IGNORE_SPACE,NO_ENGINE_SUBSTITION,ONLY_FULL_GROUP _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、TRADINAL、NO_AUTO_REATE_USER、NO_ENGINE_SUBSTITION
注意:在设置init_connect值后对其进行编辑涉及剪切。然而,我发现在设置init_connect值后试图删除它是一个很大的麻烦,所以在使用它时要小心。麻烦是什么?要在设置完init_connect值后删除它,我需要从头开始创建一个新的parm组,将除init_conneck之外的所有值设置为原始parm组的值,删除原始parm值,然后用旧名称重命名新组。Firefox和Chrome都是如此。我也无法使用CLI工具(aws-rds-modify-db参数组(删除该值。
虽然不是这篇文章的一部分,但如果有人回复如何删除/reset/noll-out init_connect而没有我上面描述的那种麻烦,那就太好了。
更新1:
没关系。我发现(RDS上的(init_connect设置无法在数据库重新启动后继续运行。因此,我上面提供的解决方案不起作用。
此外,由于无法通过控制台移除(删除(init_connect设置(为什么不呢?(,因此可以通过使用aws-rds reset db parameter groupCLI命令来移除它,而不是像我之前描述的那样重建整个参数组。
我非常失望亚马逊RDS:
- 不允许使用多个SQL_MODE值
- 不允许我们通过控制台删除init_connect设置
更新2:
根据Ross Scrivener的回应,我测试了通过AWS控制台设置多个SQL_MODE值。我使用了值"TRADITIONAL,IGNORE_SPACE,ONLY_FULL_GROUP_BY"(没有空格(。然后我重新启动了服务器两次,一切似乎都正常了。
感谢亚马逊解决了这个问题,也感谢Ross Scrivener指出AWS的变化。
很有帮助的是,亚马逊似乎已经在2016年5月24日解决了这个问题
sql_mode
参数现在可以设置为所有MySQL和MariaDB版本的值列表。所有区域的值列表也应正确。
https://forums.aws.amazon.com/thread.jspa?threadID=232266