我想知道如何在localhost(xampp)中检查MySQL严格模式是打开还是关闭。
如果在那时为什么模式以及如何关闭。
如果关闭则如何开启。
我已经关注了http://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sql-mode-full和https://mariadb.com/kb/en/mariadb/sql_mode/以及其他相关网站。但我没有得到我的问题的确切答案。
答案 0 :(得分:62)
- > 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';
答案 1 :(得分:35)
要在ubuntu中更改永久,请执行以下操作
在ubuntu命令行中sudo nano /etc/mysql/my.cnf
然后添加以下
[mysqld]
sql_mode=
答案 2 :(得分:7)
首先,使用以下命令检查mysql中是否启用了严格模式:
SHOW VARIABLES LIKE 'sql_mode';
如果要禁用它:
SET sql_mode = '';
除以下内容外,可以设置或任何其他模式。 要启用严格模式:
SET sql_mode = 'STRICT_TRANS_TABLES';
您可以检查第一个mysql查询的结果。
答案 3 :(得分:1)
您可以使用以下方法检查其本地和全局值:
SELECT @@SQL_MODE, @@GLOBAL.SQL_MODE;
答案 4 :(得分:1)
使用
检查值String input = "#345.23)abc123%^*#867.5309&&&12";
String pattern = "\\d+(?:\\.\\d+)?|\\D+";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(input);
while (m.find()) {
System.out.println(m.group(0));
}
#
345.23
)abc
123
%^*#
867.5309
&&&
12
然后使用以下命令清除@@ global.sql_mode:
SELECT @@GLOBAL.sql_mode;
答案 5 :(得分:0)
要在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"
从此sql-mode行中删除STRICT_TRANS_TABLES,
,保存文件并重新启动MYSQL57服务。通过在(新的)“ MySQL命令行客户端”窗口中执行SHOW VARIABLES LIKE 'sql_mode';
来验证结果。
(我发现网络上的其他答案和文档很有用,但是似乎没有一个告诉您在Windows中哪里可以找到my.ini文件。)
答案 6 :(得分:0)
对于我来说,我需要添加:
sql_mode="STRICT_TRANS_TABLES"
位于[mysqld]
中文件my.ini
中C:\xampp\mysql\bin
下。
答案 7 :(得分:0)
在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
答案 8 :(得分:0)
在服务器控制台上:
$ mysql -u root -p -e "SET GLOBAL sql_mode = 'NO_ENGINE_SUBSTITUTION';"
答案 9 :(得分:0)
我想知道如何检查MySQL严格模式是打开还是关闭 本地主机(xampp)。
SHOW VARIABLES LIKE 'sql_mode';
如果结果具有“ STRICT_TRANS_TABLES”,则该状态为ON。否则,它是OFF。
如果打开,则说明什么模式以及如何关闭。
如果关闭,则如何打开。
对于Windows,
C:\Program Files\MariaDB XX.X\data
my.ini
文件。SHOW VARIABLES LIKE 'sql_mode'
看看是否有效; * 3.a。要打开它,请在该行上添加STRICT_TRANS_TABLES
,如下所示:sql_mode=STRICT_TRANS_TABLES
。 *如果已经有其他值,请在此后添加一个逗号,然后将其与其余值连接起来。
* 3.b。要关闭它,只需从值中删除STRICT_TRANS_TABLES
。 *如果有多余的逗号,也要删除。
** 6。要在您的计算机上重新启动MySQL服务,
services.msc
OK
MySQL
Restart
答案 10 :(得分: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.cnf
、A:/xampp/mysql/data/my.cnf
但它甚至没有读取这些文件。在上述位置创建 .cnf
文件所浪费的时间。最糟糕的是,如果我编辑那些 my.ini
文件(即 A:/xampp/mysql/bin/my.ini
和 A:/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
。
现在我们有几个选项,正如我在下面提到的:
--defaults-file
(即 --defaults-file=mysql\bin\my.cnf
)的确切路径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.cnf
中的 A:\xampp\mysql\bin
一起使用。
我附上了一些截图以便更好地理解:
更新了 A:\xampp\mysql\data\my.ini
中的数据目录:
(选项 1)在 my.cnf
中添加 A:\xampp\mysql\data
:
(选项 2)在 my.cnf
中添加 A:\xampp\mysql\bin
:
您可能也找到了另一种解决方案。希望您能够解决有关这些配置文件的任何问题。
答案 11 :(得分:-1)
对于ubuntu:
用户: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执行这些命令。我认为此刻在下面提供的文章中有所遗漏,并且作者认为读者可以直观地理解它。