编程 MySQL 1364 错误解决办法

2024-11-19 05:07:59 +0800 CST views 869

MySQL 1364 错误解决办法

错误提示

MySQL 1364 错误提示:#1364 - field "details" doesn't have a default value。大意是:details 字段没有默认值。换句话说,插入数据时我们没有为该字段分配值,而此字段也未设置默认值。这是 MySQL 5 之后引入的一项机制。为了避免此类问题,我们可以检查 MySQL 配置文件 my.ini 中的设置。

错误原因

my.ini 中的一段配置可能导致此问题:

# 设置 SQL 模式为严格模式
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

严格模式 (STRICT_TRANS_TABLES) 会拒绝非法数据,因此在插入数据时,若某字段未设置默认值且未提供数据,就会返回 1364 错误。

检查当前 SQL 模式

如果无法访问 my.ini 文件,可以通过执行以下 SQL 命令来检查当前的 SQL 模式:

SELECT @@GLOBAL.sql_mode;

你可能会注意到 STRICT_TRANS_TABLES 的存在,这是存储引擎的严格模式,它会拒绝不符合规则的数据,这正是导致插入数据时出现 1364 错误的原因。

解决办法

方法一:为字段设置默认值

在数据库设计阶段,为那些可能为空的字段设置默认值。这可以确保在未提供数据时字段依然能够存储默认值,从而避免此类错误。

方法二:修改 SQL 模式

1. 修改 my.ini 文件

my.ini 文件中,找到 sql-mode 设置,将 STRICT_TRANS_TABLES 移除,如下所示:

# 设置 SQL 模式
sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

2. 通过 SQL 命令修改模式

如果无法直接修改 my.ini,也可以通过执行 SQL 命令来更改模式。需要注意的是,此操作需要足够的权限。

SET @@GLOBAL.sql_mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION";

执行该命令后,严格模式将被关闭,避免再出现类似的错误。

mysql5.7

复制全文 生成海报 数据库 错误处理 MySQL

推荐文章

黑客帝国代码雨效果
2024-11-19 01:49:31 +0800 CST
三种高效获取图标资源的平台
2024-11-18 18:18:19 +0800 CST
HTML + CSS 实现微信钱包界面
2024-11-18 14:59:25 +0800 CST
Vue 3 中的 Watch 实现及最佳实践
2024-11-18 22:18:40 +0800 CST
Vue中如何处理异步更新DOM?
2024-11-18 22:38:53 +0800 CST
阿里云免sdk发送短信代码
2025-01-01 12:22:14 +0800 CST
前端如何一次性渲染十万条数据?
2024-11-19 05:08:27 +0800 CST
如何在Vue 3中使用Ref访问DOM元素
2024-11-17 04:22:38 +0800 CST
MySQL死锁 - 更新插入导致死锁
2024-11-19 05:53:50 +0800 CST
开源AI反混淆JS代码:HumanifyJS
2024-11-19 02:30:40 +0800 CST
38个实用的JavaScript技巧
2024-11-19 07:42:44 +0800 CST
如何在 Vue 3 中使用 TypeScript?
2024-11-18 22:30:18 +0800 CST
CSS 实现金额数字滚动效果
2024-11-19 09:17:15 +0800 CST
前端开发中常用的设计模式
2024-11-19 07:38:07 +0800 CST
动态渐变背景
2024-11-19 01:49:50 +0800 CST
四舍五入五成双
2024-11-17 05:01:29 +0800 CST
维护网站维护费一年多少钱?
2024-11-19 08:05:52 +0800 CST
Vue3中如何进行性能优化?
2024-11-17 22:52:59 +0800 CST
Vue 3 中的 Fragments 是什么?
2024-11-17 17:05:46 +0800 CST
一文详解回调地狱
2024-11-19 05:05:31 +0800 CST
微信小程序热更新
2024-11-18 15:08:49 +0800 CST
程序员茄子在线接单