Text为什么不支持设置默认值
# Text 为什么不支持默认值??
在 Mysql 5.x 中, Text 类型不支持设置默认值。想要给默认值的话只能指定字段允许null
,或者在业务中手动赋值。
本人对这个特效深感迷惑,所以就去查了一下官方文档,文档中也只有下面一段描述。
BLOB and TEXT columns cannot have DEFAULT values.
1
更进步的解释也没有,更让我愈发迷惑。
后续通过 Copilot 得到一下的答复:
在 MySQL 中,BLOB 和 TEXT 类型的列不能有默认值,这主要是由于以下几个原因:
1. 数据类型的特性:BLOB 和 TEXT 类型用于存储大块数据或复杂数据结构,这些数据通常是变长的,且大小不固定。为这些类型设置默认值在技术上比较复杂。
2. 历史原因:在 MySQL 5.x 版本中,BLOB 和 TEXT 类型的列默认情况下不能有默认值。这是因为 MySQL 在严格模式下工作时,不允许这些类型的列设置默认值。
3. 严格模式:MySQL 的严格模式(strict mode)会对数据的完整性和一致性进行严格检查。在这种模式下,BLOB 和 TEXT 类型的列不能有默认值,以避免潜在的数据完整性问题。
4. MySQL 8.0.13 及以后:在 MySQL 8.0.13 及以后的版本中,虽然 BLOB 和 TEXT 类型的列仍然不能直接设置非 NULL 的默认值,但可以通过表达式来设置默认值,即使表达式的值是字面量。
如果你需要为这些类型的列设置默认值,可以考虑在应用层面进行处理,或者使用其他数据类型。
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
这些答复来源五花八门,不太具备正统性,有些理由看起来也有点怪怪的。后续我又在 stackoverflow 找到一个所谓的内部人员答复。
[17 Mar 2017 15:11] Ståle Deraas
Posted by developer:
This is indeed a valid feature request, and at first glance it might seem trivial to add. But TEXT/BLOBS values are not stored directly in the record buffer used for reading/updating tables. So it is a bit more complex to assign default values for them.
1
2
3
4
5
2
3
4
5
# 相关文档
why-cant-a-text-column-have-a-default-value-in-mysql (opens new window)
编辑 (opens new window)
上次更新: 2024/09/02, 17:17:17