MySQL 开启 / 关闭 严格模式 (Strict Mode)
查看 MySQL 是否开启严格模式:
打开 MySQL 配置文件 my.cnf(Windows 为 my.INI).
搜索 sql-mode 如果搜索不到就代表 非严格模式 .
搜索到了就代表开启了严格模式, 例如:
sql-mode=NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
一: 开启 关闭严格模式
开启严格模式:
vi /etc/my.cnf #编辑 MySQL 配置文件
搜索 sql-mode 关键字, 若没有, 在文件尾添加一行
替换成:
sql-mode=NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTIO
service mysqld restart 重启 MySQL
关闭严格模式:
vi /etc/my.cnf #编辑 MySQL 配置文件
搜索 sql-mode 关键字. 注释
sql-mode 相关语句
#sql-mode=NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTIO
service mysqld restart 重启 MySQL
二: 严格模式 与 非严格模式 (宽松模式) 对比
不支持对 not null 字段插入 null 值
不支持对自增长字段插入 " 值
不支持 text 字段有默认值
例子:CREATE TABLE`test_table`(
`id`int(11)NOT NULL AUTO_INCREMENT,
`name`varchar(20)NOT NULL,
`content`text NOT NULL,
PRIMARY KEY(`id`)
)ENGINE=InnoDBDEFAULT CHARSET=utf8;
1 not null 字段插入 null 值测试
插入一条记录, name 的值为 null
在非严格模式下执行MySQL>insertintotest_table(content)values('51ask');
QueryOK,1row affected,1warning(0.00sec)
MySQL>select*fromtest_table;
+----+------+------------+
|id|name|content|
+----+------+------------+
|1||51ask|
+----+------+------------+
1rowinset(0.00sec)
# 执行成功
在严格模式下执行MySQL>insertintotest_table(content)values('51ask');
ERROR1364(HY000):Field'name'doesn't have a default value
# 执行失败, 提示字段 name 不能为 null 值
上述三点不再一一做测试.
由此可见: 使用 MySQL 严格模式可以使数据更加安全严格, 缺点是减少了对空数据入库的兼容性. 建议开发环境使用严格模式以提高代码的质量及对数据的严谨性.
来源: http://www.mzh.ren/mysql-turn-on-strict-mode.html