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