我试图在mysql中设置sql_mode但它会抛出一个错误.
命令:
set global sql_mode='NO_BACKSLASH_ESCAPES','STRICT_TRANS_TABLE','NO_AUTO_CREATE_USER','NO_ENGINE_SUBSTITUTION'
Run Code Online (Sandbox Code Playgroud)
这不是设置多种模式的正确方法吗?设置会话和全局模式有什么好处?哪个是优先的?我有不同的用户尝试使用不同的UNC值更新数据库并且将会话模式设置为'NO_BACKSLASH_ESCAPES',尽管为此我可以使用gloabl模式.这有意义吗?
请告诉我.
谢谢.
Cha*_*yer 171
顺便说一句,如果你在MySQL中设置全局变量:
SET GLOBAL sql_mode = 'NO_ENGINE_SUBSTITUTION';
SET SESSION sql_mode = 'NO_ENGINE_SUBSTITUTION';
Run Code Online (Sandbox Code Playgroud)
这不会永久设置,并且每次重启后都会恢复.
所以你应该在配置文件中设置它(例如/etc/mysql/my.cnf在[mysqld]部分中),以便在MySQL重启后更改仍然有效:
配置文件:/etc/mysql/my.cnf
[mysqld]
sql_mode = NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
Run Code Online (Sandbox Code Playgroud)
更新:较新版本的Mysql(例如5.7.8或更高版本)可能需要稍微不同的语法:
[mysqld]
sql-mode="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION"
Run Code Online (Sandbox Code Playgroud)
确保sql-mode不是下划线之间有短划线,并且模式是双引号.
JPr*_*Pro 24
我解决了
正确的模式是:
set global sql_mode="NO_BACKSLASH_ESCAPES,STRICT_TRANS_TABLE,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
Run Code Online (Sandbox Code Playgroud)
Yas*_*eja 22
使用mysql配置文件永久设置sql模式.
在我的情况下,我必须更改文件/etc/mysql/mysql.conf.d/mysqld.cnf,mysql.conf.d包括在内/etc/mysql/my.cnf.我在[mysqld]下更改此内容
[mysqld]
sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
Run Code Online (Sandbox Code Playgroud)
刚删除ONLY_FULL_GROUP_BYsql模式导致它导致问题.
我正在使用ubuntu 16.04,php 7而mysql --version给了我这个mysql Ver 14.14 Distrib 5.7.13, for Linux (x86_64) using EditLine wrapper
在此更改之后运行命令
sudo service mysql stop
sudo service mysql start
Run Code Online (Sandbox Code Playgroud)
现在通过此查询检查sql模式SELECT @@sql_mode,您应该获得刚刚设置的模式.
Dev*_*pta 12
复制到配置文件: /etc/mysql/my.cnf OR /bin/mysql/my.ini
[mysqld]
port = 3306
sql-mode=""
Run Code Online (Sandbox Code Playgroud)
MySQL 重新开始.
或者你也可以
[mysqld]
port = 3306
SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
Run Code Online (Sandbox Code Playgroud)
MySQL 重新开始.
对于那些在MySQL 8上搜索此错误的人。
MySQL 8.0.11从sql-mode删除'NO_AUTO_CREATE_USER'。
MySQL 5.7:使用GRANT创建用户。而是使用CREATE USER。遵循这种做法会使NO_AUTO_CREATE_USER SQL模式对于GRANT语句不重要,因此也不建议使用。MySQL 8.0.11:使用GRANT创建用户。而是使用CREATE USER。遵循这种做法会使NO_AUTO_CREATE_USER SQL模式对于GRANT语句不重要,因此也将其删除。
从这里取
因此,您sql_mode可以像这样:
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
Run Code Online (Sandbox Code Playgroud)
或者,如果您使用的是Docker,则可以向docker-compose.yml添加下一个命令
mysql:
image: mysql:8.0.13
command: --sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
ports:
- 13306:${MYSQL_PORT}
Run Code Online (Sandbox Code Playgroud)
小智 6
对于临时更改,请使用以下命令
set global sql_mode="NO_BACKSLASH_ESCAPES,STRICT_TRANS_TABLE,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
Run Code Online (Sandbox Code Playgroud)
对于永久更改:转到配置文件 /etc/my.cnf 或 /etc/mysql/mysql.conf.d/mysqld.cnf 并添加以下行,然后重新启动 mysql 服务
[mysqld]
sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
Run Code Online (Sandbox Code Playgroud)
小智 6
以管理员用户(可能是 root)访问数据库。
检查当前的 SQL_mode
mysql> SELECT @@sql_mode;
Run Code Online (Sandbox Code Playgroud)
要设置新的 sql_mode,请退出数据库,创建一个文件
nano /etc/mysql/conf.d/<filename>.cnf
Run Code Online (Sandbox Code Playgroud)
与您的 sql_mode 内容
[mysqld]
sql_mode=NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
Run Code Online (Sandbox Code Playgroud)
重启Mysql
mysql> sudo service mysql stop
mysql> sudo service mysql start
Run Code Online (Sandbox Code Playgroud)
我们在文件夹/etc/mysql/conf.d/中创建一个文件 ,因为在主配置文件/etc/mysql/my.cnf中 ,写入的命令包含文件夹/etc/mysql/conf 中的所有设置文件。 d/