有两种方法可以做到这一点。
- 对于当前 Mysql 会话(临时解决方案)
首先执行查询以获取您的 mysql 服务器的当前 SQL 模式。
mysql> SELECT @@sql_mode;
+----------------------------------------------------------------+
| @@sql_mode |
+----------------------------------------------------------------+
|STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+----------------------------------------------------------------+
1 row in set (0.00 sec)
如果结果包含STRICT_TRANS_TABLES,则必须删除该值以允许插入查询传递 NULL 值。确保您的 mysql 用户有权应用此更改并在应用此更改后重新启动 MySQL 服务器。
SET GLOBAL sql_mode = '';
- Mysql 的生命周期(永久解决方案)
您必须更新 my.cnf 文件。该文件的位置是:\etc\my.cnf 或 \etc\mysql\mysql.cnf
[mysqld]下会有一些默认参数设置,比如
[mysqld]
innodb_file_per_table=1
default-storage-engine=MyISAM
performance-schema=0
max_allowed_packet=268435456
open_files_limit=10000
只需在其下添加一行
sql-mode=""
请务必在更改此文件后重新启动 Mysql Server。通常 root 用户将是文件的所有者,因此您必须在服务器上使用 root 用户登录。
详细了解此 SQL 模式的作用。
STRICT_TRANS_TABLES
为事务性存储引擎启用严格的 SQL 模式,并在可能的情况下为非事务性存储引擎启用。有关详细信息,请参阅严格 SQL 模式。
参考:http://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sqlmode_strict_trans_tables
NO_AUTO_CREATE_USER
防止 GRANT 语句自动创建新的用户帐户,否则会这样做,除非指定了身份验证信息。该语句必须使用 IDENTIFIED BY 指定非空密码或使用 IDENTIFIED WITH 指定身份验证插件。
参考:http://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sqlmode_no_auto_create_user
NO_ENGINE_SUBSTITUTION
当 CREATE TABLE 或 ALTER TABLE 等语句指定了禁用或未编译的存储引擎时,控制默认存储引擎的自动替换。
参考:http://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sqlmode_no_engine_substitution