查看 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=InnoDB DEFAULT CHARSET=utf8;
1 not null 字段插入 null 值测试
插入一条记录, name 的值为 null
在非严格模式下执行
- MySQL> insert into test_table(content) values('51ask');
- Query OK, 1 row affected, 1 warning (0.00 sec)
- MySQL> select * from test_table;
- +----+------+------------+
- | id | name | content |
- +----+------+------------+
- | 1 | | 51ask |
- +----+------+------------+
- 1 row in set (0.00 sec)
- # 执行成功
在严格模式下执行
- MySQL> insert into test_table(content) values('51ask');
- ERROR 1364 (HY000): Field 'name' doesn't have a default value
- # 执行失败, 提示字段 name 不能为 null 值
上述三点不再一一做测试.
由此可见: 使用 MySQL 严格模式可以使数据更加安全严格, 缺点是减少了对空数据入库的兼容性. 建议开发环境使用严格模式以提高代码的质量及对数据的严谨性.
来源: http://www.mzh.ren/mysql-turn-on-strict-mode.html