如何在 localhost (xampp) 中开启 on/off MySQL 严格模式?

How to turn on/off MySQL strict mode in localhost (xampp)?

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

如果打开,那么是什么模式以及如何关闭。

如果关了怎么开。

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

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

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

SHOW VARIABLES LIKE 'sql_mode';

如果其中一个值为STRICT_TRANS_TABLES,则启用严格模式,否则不启用。 在我的例子中,它给出了

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

因此在我的例子中,严格模式是 enabled,因为其中一个值是 STRICT_TRANS_TABLES.

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

set global sql_mode='';

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

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

set global sql_mode='STRICT_TRANS_TABLES';

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

在ubuntu命令行中

sudo nano /etc/mysql/my.cnf

然后添加以下内容

[mysqld]
sql_mode=

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

     SHOW VARIABLES LIKE 'sql_mode';

如果你想禁用它:

     SET sql_mode = '';

或除以下以外的任何其他模式都可以设置。 启用严格模式:

     SET sql_mode = 'STRICT_TRANS_TABLES';

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

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

SELECT @@SQL_MODE, @@GLOBAL.SQL_MODE;

要在 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

即编辑 C:\ProgramData\MySQL\MySQL Server 5.7\ 中的 my.ini 文件。请注意 C:\ProgramData\ 是 Windows (10) 中的隐藏文件夹。我的文件包含以下感兴趣的行:

# Set the SQL mode to strict
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

从此 sql-mode 行中删除 STRICT_TRANS_TABLES,,保存文件并重新启动 MYSQL57 服务。通过在(新)MySQL 命令行客户端 window.

中执行 SHOW VARIABLES LIKE 'sql_mode'; 来验证结果

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

检查值
SELECT @@GLOBAL.sql_mode;

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

SET @@GLOBAL.sql_mode=''

就我而言,我需要添加:

sql_mode="STRICT_TRANS_TABLES"

在文件 my.ini 下的 [mysqld] 位于 C:\xampp\mysql\bin

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

开始 mysql

我做了 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

在服务器控制台上:

$ mysql -u root -p -e "SET GLOBAL sql_mode = 'NO_ENGINE_SUBSTITUTION';" 

I want to know how to check whether MySQL strict mode is on or off in localhost(xampp).

SHOW VARIABLES LIKE 'sql_mode';

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

If on then for what modes and how to off.

If off then how to on.

对于Windows,

  1. 转到C:\Program Files\MariaDB XX.X\data
  2. 打开 my.ini 文件。
  3. *在"sql_mode"这一行,修改值开启严格模式ON/OFF.
  4. 保存文件
  5. **重新启动 MySQL 服务
  6. 运行 SHOW VARIABLES LIKE 'sql_mode' 再次查看是否有效;

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

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

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

  1. 打开运行命令window(按WINDOWS+R键)
  2. 类型services.msc
  3. 点击OK
  4. 右键单击名称 MySQL
  5. 点击Restart

对于ubuntu:

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

user: mysql -u root -p

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

    显示变量 'sql_mode';

基本上,您会看到 table 作为结果,如果 table 的值为 STRICT_TRANS_TABLES,则表示启用了此选项,因此您需要删除来自此 table 的值,使用以下命令:

set global sql_mode='';

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

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

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

今天我试图永久设置 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

,它甚至无法工作

然后我检查了所有文件夹以了解该控制面板是如何工作的,发现 thta 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(即 --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]

更新数据目录。之后,我刚刚在 A:\xampp\mysql\data (数据目录)中创建了一个 my.conf 文件。其中包含 sql_mode 选项。它还与 A:\xampp\mysql\bin 中的 my.cnf 一起使用。

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

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

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

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

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