【问题标题】:MySQL: Setting sql_mode permanentlyMySQL:永久设置 sql_mode
【发布时间】:2013-12-20 19:57:01
【问题描述】:

通过 MySQL 命令行客户端,我正在尝试设置全局 mysql_mode:

SET GLOBAL sql_mode = TRADITIONAL;

这适用于当前会话,但在我重新启动服务器后,sql_mode 会恢复为默认值:'',一个空字符串。

如何将 sql_mode 永久设置为 TRADITIONAL?

如果相关,MySQL 是 WAMP 包的一部分。

谢谢。

【问题讨论】:

    标签: mysql sql-mode


    【解决方案1】:

    MySQL sql_mode "TRADITIONAL",又名“严格模式”,由the MySQL docs 定义为:

    在向列中插入不正确的值时“给出错误而不是警告”。

    以下是确保您的 sql_mode 设置为 "TRADITIONAL" 的方法。

    首先,检查您的当前设置:

    mysql
    mysql> SELECT @@GLOBAL.sql_mode;
    +-------------------+
    | @@GLOBAL.sql_mode |
    +-------------------+
    |                   |
    +-------------------+
    1 row in set (0.00 sec)
    

    这返回空白,默认值,这很糟糕:您的 sql_mode 未设置为“TRADITIONAL”。

    所以编辑配置文件:

    sudo vim /etc/mysql/my.cnf
    

    在标记为[mysqld] 的部分中添加这一行:sql_mode="TRADITIONAL"(正如fancyPants 指出的那样)

    然后重启服务器:

    sudo service mysql restart
    

    然后再次检查:

    mysql
    mysql> SELECT @@GLOBAL.sql_mode;
    +------------------------------------------------------------------------------------------------------------------------------------------------------+
    | @@GLOBAL.sql_mode                                                                                                                                    |
    +------------------------------------------------------------------------------------------------------------------------------------------------------+
    | 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 |
    +------------------------------------------------------------------------------------------------------------------------------------------------------+
    1 row in set (0.00 sec)
    

    成功!你现在是金子了。

    【讨论】:

    • 如果我想永久关闭它怎么样 sql-mode="" 不起作用
    • @dragonfire 是 sql_mode 而不是 sql-mode。我现在刚试了一下,设置sql_mode = ""并重新启动服务器可以清除所有设置。
    【解决方案2】:

    将此添加到您的 my.cnf 文件(或 my.ini,如果您使用 Windows):

    sql_mode="TRADITIONAL"
    

    然后重启服务器

    【讨论】:

    • 我在 my.ini 文件的“socket = /tmp/mysql.sock”下添加了 sql-mode="TRADITIONAL",现在 MySQL 命令行客户端无法启动。跨度>
    • 没关系,我明白了。我在 [client] 而不是 [wampmysqld] 下添加。谢谢你,我会接受你的回答,并根据stackoverflow友好交换政策给你一分。
    • 我打算建议你编辑到现在使用的 sql_mode 而不是 sql-mode,但是我的编辑必须是 6 个字符。也许这适用于或确实适用于某些版本的 MySQl 或它的部署,但不是最新的。
    • @bitsum 据我所知,用破折号或下划线书写并不重要。而且我不知道,这种行为在任何版本中都发生了变化,或者某种风格依赖于某个版本。
    • 好吧,我之所以这么说,是因为在本文之后,我最初使用了破折号,但是当我提取最新更新时,它对我产生了错误,直到我用下划线替换了破折号。因此,它现在可能适用。当然,这是在Ubuntu和MySql 5.7下,所以在Windows上谁知道呢。
    猜你喜欢
    • 2018-08-21
    • 2012-08-15
    • 2011-01-20
    • 2016-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-25
    相关资源
    最近更新 更多