mysql严格模式Strict Mode怎么使用

网友投稿 1065 2023-07-08

mysql严格模式Strict Mode怎么使用

mysql严格模式Strict Mode怎么使用

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的严格模式可以增强数据的安全性,但缺点是降低了对空数据入库的兼容性。建议开发环境使用严格模式以提高代码的质量及对数据的严谨性。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Mac系统中忘记MySQL密码怎么解决
下一篇:MySQL8.0.32安装及环境配置的步骤是什么
相关文章