我正在尝试使用第二代云sql,并希望更改sql模式。在UI中,我只能将sql_mode设置为下拉列表中的一个值,但不能将其设置为多个(例如," STRICT_MODE_TRANS,ALLOW_INVALID_DATES")。什么是实现这一目标的最佳方式?
干杯, 安德烈
答案 0 :(得分:10)
我知道这篇文章是1岁,但是当我尝试使用5.7将数据库从MySQL 5.5迁移到Google SQL时,当我遇到sql_mode问题时,我偶然发现了这个问题。虽然我知道我们可以gcloud sql instances patch <instance_name> --database-flags sql_mode=TRADITIONAL
获得我们想要的任何有效值,但我花了几个小时才放弃并得出结论,我们无法在Google Cloud SQL上设置多个值。
Google现在只允许在sql_mode标志上设置一个值。如果您的问题与删除ONLY_FULL_GROUP_BY(OP未提及他想自定义值的原因)有关而不删除sql_mode的其余值,则使用控制台中的值TRADITIONAL或public async Task Invoke(HttpContext context)
{
if(context.Request.Path.Value.StartsWith("/api"))
{
// check if route is marked as [Authorize]
// and then do some logic
}
await _next.Invoke(context);
}
将从其余的值中删除该值字符串。
在MySQL 5.7.4之前,在MySQL 5.7.8及更高版本中,TRADITIONAL相当于STRICT_TRANS_TABLES,STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER和NO_ENGINE_SUBSTITUTION。
我只会将此作为上述评论添加,但由于缺少积分,我暂时无法添加。
答案 1 :(得分:2)
Google Cloud SQL目前不支持此功能。您只能设置一个值。
答案 2 :(得分:0)
另一种可能的解决方案是将 sql_mode 设置为 HIGH_NOT_PRECEDENCE
在Cloud SQL中设置后,sql_mode的字符串将变为:
HIGH_NOT_PRECEDENCE
所有其他标志都已删除!
我来自一个较旧的项目,因此该解决方案可能并不适用于所有人,但似乎对我们来说效果很好,而且可以快速尝试。