首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >会话sql模式+默认sql模式

会话sql模式+默认sql模式
EN

Database Administration用户
提问于 2015-08-31 14:37:02
回答 1查看 4.2K关注 0票数 2

我正在MySQL5.7中测试我的应用程序,并且有一些与ONLY_FULL_GROUP_BY不兼容的代码。我将在稍后的版本中解决这个问题。我找到了一种在运行任何查询之前执行“SET SESSION sql_mode=”来关闭应用程序的方法。

我有两个问题:

  1. 这是否适用于没有根访问数据库的共享主机服务?它似乎对我的测试起了作用。
  2. 既然模式被设置为“”,这到底是什么意思?在我看来,这似乎是使它回到零,并在非限制性的。(我的另一个想法是,它将它设置为零,并让mysql决定该做什么)。

根据我对手动空模式的阅读,MySQL5.1中使用默认的空模式,但是每个版本的限制都变得更严格了。对于MySQL5.7,它是ONLY_FULL_GROUP_BY, STRICT_TRANS_TABLES, NO_ZERO_IN_DATE, NO_ZERO_DATE, ERROR_FOR_DIVISION_BY_ZERO, NO_AUTO_CREATE_USER, and NO_ENGINE_SUBSTITUTION

基于此,模式似乎是规则的列表,如果它是空的,那么规则适用吗?

另外,如果我将模式设置为"“,这会始终禁用服务器设置的模式吗?

EN

回答 1

Database Administration用户

发布于 2015-08-31 19:34:06

  • SET SESSION变量仅适用于当前连接。
  • 在建立连接时,SET GLOBAL变量作为默认变量应用。
  • SESSION不需要root访问;GLOBAL需要访问。
  • 你要小心你把它设置成:

假设您发现缺省值是

代码语言:javascript
复制
mysql> SELECT @@sql_mode;
+--------------------------------+
| @@sql_mode                     |
+--------------------------------+
| STRICT_ALL_TABLES,NO_ZERO_DATE |
+--------------------------------+

盲目地设置它会在设置您想要的一个的同时改变这两个:

代码语言:javascript
复制
mysql> set session sql_mode = 'ONLY_FULL_GROUP_BY';
mysql> SELECT @@sql_mode;
+--------------------+
| @@sql_mode         |
+--------------------+
| ONLY_FULL_GROUP_BY |
+--------------------+

因此,构建完整的字符串:

代码语言:javascript
复制
mysql> SET sql_mode = 'NO_ZERO_DATE,STRICT_ALL_TABLES,ONLY_FULL_GROUP_BY';

mysql> SELECT @@sql_mode;
+---------------------------------------------------+
| @@sql_mode                                        |
+---------------------------------------------------+
| ONLY_FULL_GROUP_BY,STRICT_ALL_TABLES,NO_ZERO_DATE |
+---------------------------------------------------+

增编

如果您想在不知道已经设置了什么模式(S)的情况下添加/减去一个模式,这似乎是有效的:

打开(仅供会议使用):

代码语言:javascript
复制
SET @@sql_mode = CONCAT(@@sql_mode, ',', 'ONLY_FULL_GROUP_BY');

关闭(仅用于会话):

代码语言:javascript
复制
SET @@sql_mode =
        REPLACE(
        REPLACE(
        REPLACE(@@sql_mode, 'ONLY_FULL_GROUP_BY,', ''),
                           ',ONLY_FULL_GROUP_BY', ''),
                            'ONLY_FULL_GROUP_BY', '');

注意逗号。

票数 5
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/112739

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档