77

我想知道如何在 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/和其他相关网站也是如此。但我没有得到我的问题的确切答案。

4

12 回答 12

119

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

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

SHOW VARIABLES LIKE 'sql_mode';

如果其中一个值是STRICT_TRANS_TABLES,则启用严格模式,否则不启用。就我而言,它给了

+--------------+------------------------------------------+ 
|Variable_name |Value                                     |
+--------------+------------------------------------------+
|sql_mode      |STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION|
+--------------+------------------------------------------+

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

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

set global sql_mode='';

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

-> 要再次启用严格模式,请运行以下 sql:

set global sql_mode='STRICT_TRANS_TABLES';
于 2016-11-30T13:19:55.933 回答
56

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

在 ubuntu 命令行中

sudo nano /etc/mysql/my.cnf

然后添加以下内容

[mysqld]
sql_mode=
于 2017-05-01T11:13:37.203 回答
16

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

     SHOW VARIABLES LIKE 'sql_mode';

如果你想禁用它:

     SET sql_mode = '';

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

     SET sql_mode = 'STRICT_TRANS_TABLES';

您可以检查第一个 mysql 查询的结果。

于 2017-10-27T00:16:42.550 回答
7

检查值

SELECT @@GLOBAL.sql_mode;

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

SET @@GLOBAL.sql_mode=''
于 2019-01-22T16:02:42.137 回答
3

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

"C:\Program Files\MySQL\MySQL 服务器 5.7\bin\mysqld.exe" --defaults-file="C:\ProgramData\MySQL\MySQL 服务器 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"

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

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

于 2019-01-08T19:14:26.797 回答
3

就我而言,我需要添加:

sql_mode="STRICT_TRANS_TABLES"

在位于. [mysqld]_my.iniC:\xampp\mysql\bin

于 2019-06-14T03:38:20.490 回答
2

您可以通过以下方式检查它的本地和全局值:

SELECT @@SQL_MODE, @@GLOBAL.SQL_MODE;
于 2018-10-05T11:54:14.857 回答
1

在 Debian 10 上,我从./opt/lampp/xampp start

我确实strace ./opt/lampp/sbin/mysqld看到了 my.cnf 在那里:

stat("/opt/lampp/etc/my.cnf", {st_mode=S_IFREG|0644, st_size=5050, ...}) = 0
openat(AT_FDCWD, "/opt/lampp/etc/my.cnf", O_RDONLY|O_CLOEXEC) = 3

因此,我将 sql_mode 配置添加到/opt/lampp/etc/my.cnf而不是/etc/mysql/my.cnf

于 2020-03-12T04:40:53.940 回答
0

在服务器控制台上:

$ mysql -u root -p -e "SET GLOBAL sql_mode = 'NO_ENGINE_SUBSTITUTION';" 
于 2020-09-10T02:15:09.727 回答
0

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

SHOW VARIABLES LIKE 'sql_mode';

如果结果有“STRICT_TRANS_TABLES”,则为 ON。否则,它是关闭的。

如果打开然后是什么模式以及如何关闭。

如果关了怎么开。

对于 Windows,

  1. C:\Program Files\MariaDB XX.X\data
  2. 打开my.ini文件。
  3. *在带有“sql_mode”的行,修改值以打开/关闭严格模式。
  4. 保存文件
  5. **重启MySQL服务
  6. 再次运行SHOW VARIABLES LIKE 'sql_mode',看看是否有效;

*3.a. 要打开它,请STRICT_TRANS_TABLES在该行上添加如下sql_mode=STRICT_TRANS_TABLES:*如果已经有其他值,请在此之后添加一个逗号,然后与其余值连接。

*3.b。要关闭它,只需STRICT_TRANS_TABLES从 value 中删除。*如果有逗号,也删除额外的逗号。

**6。要在您的计算机上重新启动 MySQL 服务,

  1. 打开运行命令窗口(按 WINDOWS + R 按钮)。
  2. 类型services.msc
  3. 点击OK
  4. 右键单击名称MySQL
  5. 点击Restart
于 2020-10-07T11:19:34.427 回答
0

今天我试图设置sql_mode=TRADITIONAL永久,但所有的努力都是徒劳的,不是因为有错误的答案,而是由于 xampp 配置mysqld启动脚本的方式。让我详细解释一下。

当然,在来到 SO 之前,你们都尽力而为,我也是。我遵循了A:\xampp\mysql\bin\my.ini(如下所示)中的评论:

# You can copy this file to
# A:/xampp/mysql/bin/my.cnf to set global options,
# mysql-data-dir/my.cnf to set server-specific options (in this
# installation this directory is A:/xampp/mysql/data) or
# ~/.my.cnf to set user-specific options.

所以我尝试了A:/xampp/mysql/bin/my.cnfA:/xampp/mysql/data/my.cnf但它甚至没有读取这些文件。.cnf在上述位置创建文件浪费了数小时。my.ini最糟糕的是,如果我编辑这些文件(即A:/xampp/mysql/bin/my.iniA:/xampp/mysql/data/my.ini),它甚至都不起作用

然后我检查了所有文件夹以了解该控制面板的工作原理,发现 xampp 使用mysql_start.bat脚本来启动 msql 守护进程。bat文件内容如下:

@echo off
cd /D %~dp0
echo Diese Eingabeforderung nicht waehrend des Running beenden
echo Please dont close Window while MySQL is running
echo MySQL is trying to start
echo Please wait  ...
echo MySQL is starting with mysql\bin\my.ini (console)

mysql\bin\mysqld --defaults-file=mysql\bin\my.ini --standalone

if errorlevel 1 goto error
goto finish

:error
echo.
echo MySQL konnte nicht gestartet werden
echo MySQL could not be started
pause

:finish

在这里我们可以清楚地看到,它显式地使用参数--defaults-file告诉 MySQL 守护进程从哪里读取文件。现在我希望你有很多想法来解决这个问题。

注意:我已经添加A:/xampp/mysql/bin到我的PATH.

现在我们有几个选项,正如我在下面提到的:

  1. 将确切路径添加到--defaults-file(ie --defaults-file=mysql\bin\my.cnf)
  2. 您可以省略该标志并让 mysqld 从默认位置读取(可以看到那些使用mysql --help)现在您有 2 个选项:
    • 编辑这些默认my.ini文件或
    • 按照注释my.cnf根据您的安装目录创建文件。

我刚刚删除了那个--defaults-file标志,让它使用 MySQL 的默认配置而不是 xampp 运行。到那时,我也必须改变A:\xampp\mysql\data\my.ini

[mysqld]
datadir=C:/xampp/mysql/data
[client]

[mysqld]
datadir=A:\xampp\mysql\data
[client]

更新数据目录。之后,我刚刚在(数据目录)中创建了一个my.conf文件。A:\xampp\mysql\data里面有sql_mode选项。它也适用my.cnfA:\xampp\mysql\bin.

我附上了一些截图以便更好地理解:

更新数据目录A:\xampp\mysql\data\my.ini

在此处输入图像描述

(选项 1)my.cnf添加A:\xampp\mysql\data

在此处输入图像描述

(选项2)my.cnf添加A:\xampp\mysql\bin

在此处输入图像描述

您也可能找到另一种解决方案。希望您能够解决有关这些配置文件的任何问题。

于 2021-06-22T05:08:24.277 回答
-2

对于 ubuntu:

  • 通过 SSH 连接到 VPS 后,请尝试使用“root”连接到 mysql

用户:mysql -u root -p

  • 输入“root”用户密码,您将进入mysql环境(mysql>),然后只需检查什么是sql_mode,使用以下命令:

    显示像'sql_mode'这样的变量;

基本上,您将看到该表作为您的结果,如果该表的值为STRICT_TRANS_TABLES,则表示此选项已启用,因此您需要使用以下命令从该表中删除该值:

set global sql_mode='';

这会将您的表的值设置为空并禁用此设置。像这样:

 +---------------+-------+
 | Variable_name | Value |
 +---------------+-------+
 | sql_mode      |       |
 +---------------+-------+

请确保在 MySQL 环境中执行这些命令,而不是简单地通过 SSH。我认为下面提供的文章错过了这一时刻,作者假设读者直观地理解它。

于 2020-11-25T05:14:51.297 回答