如何在localhost(xampp)中打开/关闭MySQL严格模式?

Ips*_*out 45 mysql

我想知道如何在localhost(xampp)中检查MySQL严格模式是打开还是关闭.

如果在那时为什么模式和如何关闭.

如果关闭然后如何开启.

我已经跟着http://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sql-mode-fullhttps://mariadb.com/kb/en/mariadb/sql_mode/和其他相关网站也是.但我没有得到我的问题的确切答案.

Ips*_*out 77

- > STRICT_TRANS_TABLES负责设置MySQL严格模式.

- > 检查是否启用了严格模式运行以下sql:

SHOW VARIABLES LIKE 'sql_mode';
Run Code Online (Sandbox Code Playgroud)

如果其中一个值是STRICT_TRANS_TABLES,则启用严格模式,否则不启用.在我的情况下它给了

+--------------+------------------------------------------+ 
|Variable_name |Value                                     |
+--------------+------------------------------------------+
|sql_mode      |STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION|
+--------------+------------------------------------------+
Run Code Online (Sandbox Code Playgroud)

因此在我的情况下启用严格模式,因为其中一个值是STRICT_TRANS_TABLES.

- > 要禁用严格模式运行以下sql:

set global sql_mode='';
Run Code Online (Sandbox Code Playgroud)

[或除STRICT_TRANS_TABLES之外的任何模式.例如:设置全局sql_mode ='NO_ENGINE_SUBSTITUTION';]

- >再次启用严格模式运行下面的sql:

set global sql_mode='STRICT_TRANS_TABLES';
Run Code Online (Sandbox Code Playgroud)

  • 我的命令 `set global sql_mode=''` 不起作用(我的版本是 5.7),但是 `set sql_mode=''` 可以。有什么解释吗? (7认同)
  • 如果你重新启动mysql服务器,然后设置再次更改,有没有办法永久更改它 (2认同)

Dra*_*ire 38

要在ubuntu中永久更改它,请执行以下操作

在ubuntu命令行中

sudo nano /etc/mysql/my.cnf
Run Code Online (Sandbox Code Playgroud)

然后添加以下内容

[mysqld]
sql_mode=
Run Code Online (Sandbox Code Playgroud)

  • 16.04 在/etc/mysql/mysql.conf.d/mysqld.cnf (3认同)

小智 8

首先,使用以下命令检查mysql中是否启用了严格模式:

     SHOW VARIABLES LIKE 'sql_mode';
Run Code Online (Sandbox Code Playgroud)

如果要禁用它:

     SET sql_mode = '';
Run Code Online (Sandbox Code Playgroud)

或以下任何其他模式可以设置.要启用严格模式:

     SET sql_mode = 'STRICT_TRANS_TABLES';
Run Code Online (Sandbox Code Playgroud)

您可以从第一个mysql查询中检查结果.


Fre*_*ext 5

要在 Windows (10) 中永久更改它,请编辑该my.ini文件。要查找 my.ini 文件,请查看 Windows 服务器中的路径。例如,对于我的 MySQL 5.7 实例,服务是MYSQL57,在此服务的属性中,可执行文件的路径是:

“C:\ Program Files \ MySQL \ MySQL Server 5.7 \ bin \ mysqld.exe”--defaults-file =“C:\ ProgramData \ MySQL \ MySQL Server 5.7 \ my.ini”MySQL57

即编辑my.ini文件中的C:\ProgramData\MySQL\MySQL Server 5.7\. 请注意,这C:\ProgramData\是 Windows (10) 中的隐藏文件夹。我的文件有以下几行:

# Set the SQL mode to strict
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
Run Code Online (Sandbox Code Playgroud)

从此 sql-mode 行中删除STRICT_TRANS_TABLES,,保存文件并重新启动 MYSQL57 服务。SHOW VARIABLES LIKE 'sql_mode';通过在(新的)MySQL 命令行客户端窗口中执行来验证结果。

(我发现网上的其他答案和文档很有用,但它们似乎都没有告诉您在 Windows 中哪里可以找到 my.ini 文件。)


Tou*_*ake 5

检查值

SELECT @@GLOBAL.sql_mode;
Run Code Online (Sandbox Code Playgroud)

然后使用以下命令清除@@global.sql_mode:

SET @@GLOBAL.sql_mode=''
Run Code Online (Sandbox Code Playgroud)

  • 您没有删除 `STRICT_TRANS_TABLES`,而是完全清除 sql_mode。这是一个严重的区别。 (5认同)