博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mysql 严格模式 Strict Mode说明
阅读量:5999 次
发布时间:2019-06-20

本文共 2770 字,大约阅读时间需要 9 分钟。

1.开启与关闭Strict Mode方法

找到mysql安装文件夹下的my.cnf(windows系统则是my.ini)文件

sql_mode中增加STRICT_TRANS_TABLES则表示开启严格模式。如没有增加则表示非严格模式,改动后重新启动mysql就可以

比如这就表示开启了严格模式:

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

2.Strict Mode功能说明

  • 不支持对not null字段插入null值
  • 不支持对自增长字段插入”值
  • 不支持text字段有默认值

3.样例:

创建数据表方便測试

CREATE TABLE `mytable` ( `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 mytable(content) values('programmer');Query OK, 1 row affected, 1 warning (0.00 sec)mysql> select * from mytable;+----+------+------------+| id | name | content    |+----+------+------------+|  1 |      | programmer |+----+------+------------+1 row in set (0.00 sec)

运行成功,name的值自己主动转为”

在严格模式下运行

mysql> insert into mytable(content) values('programmer');ERROR 1364 (HY000): Field 'name' doesn't have a default value

运行失败,提示字段name不能为null值

2.自增长字段插入”值測试

对id字段插入”值

在非严格模式下运行

mysql> insert into mytable(id,name,content) value('','fdipzone','programmer');Query OK, 1 row affected, 1 warning (0.00 sec)mysql> select * from mytable;+----+----------+------------+| id | name     | content    |+----+----------+------------+|  1 | fdipzone | programmer |+----+----------+------------+1 row in set (0.00 sec)

运行成功

在严格模式下运行

mysql> insert into mytable(id,name,content) value('','fdipzone','programmer');ERROR 1366 (HY000): Incorrect integer value: '' for column 'id' at row 1

运行失败。提示字段id不能为”

mysql> insert into mytable(id,name,content) value(null,'fdipzone','programmer');Query OK, 1 row affected (0.00 sec)mysql> select * from mytable;+----+----------+------------+| id | name     | content    |+----+----------+------------+|  1 | fdipzone | programmer |+----+----------+------------+1 row in set (0.00 sec)

字段id为null则可运行成功

3.text字段默认值測试

创建一个数据表mytable。当中text设置默认值default=”

在非严格模式下运行

mysql> CREATE TABLE `mytable` (    ->  `id` int(11) NOT NULL AUTO_INCREMENT,    ->  `name` varchar(20) NOT NULL,    ->  `content` text NOT NULL default '',    ->  PRIMARY KEY (`id`)    -> ) ENGINE=InnoDB DEFAULT CHARSET=utf8;Query OK, 0 rows affected, 1 warning (0.03 sec)mysql> show tables;+------------------------------+| Tables_in_test_version       |+------------------------------+| mytable                      |+------------------------------+

运行成功

在严格模式下运行

mysql> CREATE TABLE `mytable` (    ->  `id` int(11) NOT NULL AUTO_INCREMENT,    ->  `name` varchar(20) NOT NULL,    ->  `content` text NOT NULL default '',    ->  PRIMARY KEY (`id`)    -> ) ENGINE=InnoDB DEFAULT CHARSET=utf8;ERROR 1101 (42000): BLOB/TEXT column 'content' can't have a default value

运行失败,提示content字段是TEXT类型,不能使用默认值。

总结。使用mysql严格模式能够使数据更加安全严格,缺点是降低了对空数据入库的兼容性。建议开发环境使用严格模式以提高代码的质量及对数据的严谨性。

转载地址:http://nkzmx.baihongyu.com/

你可能感兴趣的文章
Unity 思考问题的办法
查看>>
迅速读懂:Effective STL (五)
查看>>
归并排序求逆序对
查看>>
Oracle 中select XX_id_seq.nextval from dual 什么意思呢?
查看>>
使用vue做项目
查看>>
Dapper的基本使用
查看>>
浏览器关闭cookie后,session处理
查看>>
Java中serialVersionUID的解释
查看>>
composer使用
查看>>
米勒罗宾素数测试法
查看>>
关于字符串循环遍历的两种方法
查看>>
收藏几款比较不错的富文本编辑器
查看>>
代码code设置9.png/9-patch 图片背景后,此view中的TextView等控件显示不正常(常见于listview中)...
查看>>
ERROR: bootstrap checks failed
查看>>
20165211 2017-2018-2 《Java程序设计》第2周学习总结
查看>>
CF498D:Traffic Jams in the Land——题解
查看>>
ldap快速配置
查看>>
使用 MVVMLight 命令绑定
查看>>
js中split()和join()的用法
查看>>
Django 优秀资源大全
查看>>