插入数据时会自动更新 MySQL 非空字段

mysql数据表

CREATE TABLE `t_shops`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `content` text CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '内容',
  `email` char(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '邮箱',
  `phone` char(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '联系人',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci;

php执行代码

$params=[];
DB::enableQueryLog();
$id=Db::table('shops')->insertGetId($params);
$a = DB::getQueryLog();
print_r($a);

执行结果如下

这是为什么呢,不应该是报错吗???我数据库表已经设置成非空了,我查了下底层代码是自动修改成空了,怎么可以取消这个呢,让自己可以直接报错!

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
最佳答案

找到原因了,是因为没有开启严格模式,只需要在evn里面加入DB_STRICT_MODE=true :joy:

3年前 评论
讨论数量: 3

找到原因了,是因为没有开启严格模式,只需要在evn里面加入DB_STRICT_MODE=true :joy:

3年前 评论

你这样写能插入成功?我试了下直接报错了。

SQLSTATE[HY000]: General error: 1364 Field 'content' doesn't have a default value (SQL: insert into `t_shops` () values ())
3年前 评论

@qf-Z 我是没有开启严格模式,所以就直接插入成功了!

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!