STRICT_TRANS_TABLES(存储引擎启用严格模式,非法数据值被拒绝)。
MySQL 1364 错误提示:#1364 - Field "details" doesn't have a default value。大概意思是:details字段没有默认的数值;也就是说我们没有为其分配数值,而表中此字段也没有设置默认值。这是MySQL5出来后搞出来的东东,认真看一下my.ini文件中有这样一段:
my.ini中相关代码
# Set the SQL mode to strict # sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
假如您无法看到my.ini,你可以执行以下SQL命令。
SQL代码
SELECT @@GLOBAL.sql_mode;
您可能一下子就注意到:STRICT_TRANS_TABLES(存储引擎启用严格模式,非法数据值被拒绝)。这也就是为什么我们插入数据时返回1364的原因:details字段没有设置默认值。
解决办法有两种:
第一种:数据库设计时,为可能没有数据的字段设置默认值。
第二种:设置SQL的模式,此有两种方法:
(1),配置my.ini,去掉:STRICT_TRANS_TABLES
my.ini配置代码
# Set the SQL mode to strict # sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
(2),运行SQL命令。注:此命令需要权限!
SQL代码
SET @@GLOBAL.sql_mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION";
分享到:
相关推荐
`STRICT_TRANS_TABLES`模式是一种严格模式,当启用时,MySQL会在插入或更新数据时检查数据是否符合列的定义,包括长度限制。如果不符合,它会抛出错误而不是默默地截断数据。默认情况下,MySQL可能允许非严格模式,...
存储引擎启用严格模式,非法数据值被拒绝 Create table t3(id int(4) primary key auto_increment,sname char(4)); 设置id自动增长 Create table t3(id int(4) primary key auto_increment,sname char(4)...
在MySQL的新版本中,严格SQL模式(Strict SQL Mode)被启用,它要求所有非数值字段的值都不能是空字符串,而应该使用NULL来表示无值。 严格SQL模式的目的是为了增强数据的完整性和一致性,防止因为不严谨的数据输入...
1. **STRICT_TRANS_TABLES**:严格模式,在插入或更新数据时会严格遵守SQL标准,如果数据不符合表定义的列类型或长度,将会报错(ERROR),而不是警告(WARNING),并且在事务中会进行回滚。这是为了防止错误的数据...
- `STRICT_TRANS_TABLES`仅针对事务表启用严格模式,对于非事务表,MySQL仍然允许插入可能有数据丢失的值。 在MySQL 5.0及以上版本,你可以根据需要组合这些模式,以满足特定的应用场景。例如,如果你在开发过程中...
在MySQL 5.0及以上版本中,启用Strict Mode(STRICT_TRANS_TABLES)时,系统会对插入数据进行更严格的检查: 1. **不允许对NOT NULL字段插入NULL值**:如果尝试向非空字段插入NULL,严格模式将抛出错误,而不是像非...
当 `only_full_group_by` SQL 模式被启用时(默认情况下),MySQL 将拒绝那些在 SELECT 列表、WHERE 条件或 ORDER BY 子句中引用了分组中未显式列出的非聚合列的查询。 #### 解决方案 如果遇到因 `only_full_group_...
MySQL的严格模式(Strict Mode)是一种数据库操作的设置,它强化了MySQL服务器对数据输入的验证规则,确保数据的准确性和一致性。在非严格模式下,MySQL会容忍一些数据类型不匹配或者超出字段长度的数据插入,这可能...
这个错误提示表明你的查询违反了`ONLY_FULL_GROUP_BY`的SQL模式,这是MySQL 5.7.5及更高版本默认启用的一种严格模式。 `ONLY_FULL_GROUP_BY`模式的存在是为了确保查询结果的一致性和可预测性。在该模式下,MySQL不...
在这个场景中,我们可以启用`STRICT_TRANS_TABLES`和`NO_ZERO_DATE`模式,这两个模式将禁止在日期字段中插入零值,并且在事务表中启用严格模式,即当遇到无效数据时,MySQL将抛出错误而不是自动修正。 下面是启用...
例如,如果你正在将一个允许NULL值插入数字列的数据库迁移到一个不允许NULL值的数据库,可以启用`STRICT_TRANS_TABLES` 模式,这样在迁移过程中就会立即发现并处理这类问题,而不是等到数据迁移后才发现数据不一致。...
在MySQL的新版本中,特别是开启了严格模式(如STRICT_ALL_TABLES或STRICT_TRANS_TABLES),数据库会对数据输入进行更严格的验证。在这种模式下,日期时间类型的列不允许插入空字符串,而应使用NULL来表示空值。因此...
1. 数据校验:通过开启特定的`sql_mode`,如`STRICT_TRANS_TABLES`,可以强制执行严格的SQL语句,确保只有合法的数据能被插入或更新,从而提高数据完整性。 2. SQL兼容性:在跨数据库迁移时,如从MySQL迁移到其他...
- `STRICT_TRANS_TABLES` 和 `STRICT_ALL_TABLES`:启用严格模式,拒绝无效的数据值,适用于事务和非事务存储引擎。 3. **严格SQL模式**: 在严格模式下,MySQL会将某些可能导致数据不一致的警告转换为错误。例如...
然而,在MySQL 5.7.x及更高版本中,默认启用了`ONLY_FULL_GROUP_BY`模式,这导致了对`GROUP BY`语句更为严格的解释。在`ONLY_FULL_GROUP_BY`模式下,所有出现在`SELECT`列表中但未包含在`GROUP BY`子句的列必须是...
MySQL 5.7及以上版本引入了一个新的SQL标准模式`ONLY_FULL_GROUP_BY`,该模式旨在增强SQL查询的严格性,确保结果集的合法性。在早期的MySQL版本中,某些GROUP BY查询可以返回不确定的行数据,这在严格模式下是不允许...
- `STRICT_TRANS_TABLES`: 在严格模式下处理非事务表。 - `NO_ENGINE_SUBSTITUTION`: 如果指定的存储引擎不可用,则拒绝执行语句。 - `NO_ZERO_DATE`: 不允许日期包含零值。 - `NO_ZERO_IN_DATE`: 不允许日期中...
- **sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES**:SQL模式设置,NO_ENGINE_SUBSTITUTION表示不允许使用表定义中的不同存储引擎,STRICT_TRANS_TABLES表示对于非事务表执行严格的SQL语句检查。...
这个模式类似于STRICT_TRANS_TABLES,但更严格。它会使MySQL的行为像传统的SQL数据库系统,当尝试插入不正确的值时,会立即报告错误并停止操作,无论是否涉及事务。 4. ALLOW_INVALID_DATES: 在严格模式下,此...
特别是在`STRICT_TRANS_TABLES`模式启用时,MySQL会更加严格地验证日期和时间值,如果数据类型不匹配,会拒绝插入数据并返回错误。这就解释了为什么在升级后,之前能够正常导入的数据会出现错误。 为了解决这个问题...