Text为什么不支持设置默认值

后端1 min
#Mysql
目录(2)

Text 为什么不支持默认值??

在 Mysql 5.x 中, Text 类型不支持设置默认值。想要给默认值的话只能指定字段允许null,或者在业务中手动赋值。

本人对这个特性深感迷惑,所以就去查了一下官方文档,文档中也只有下面一段描述。

BLOB and TEXT columns cannot have DEFAULT values.

更进一步的解释也没有,更让我愈发迷惑。

后续通过 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 的默认值,但可以通过表达式来设置默认值,即使表达式的值是字面量。

如果你需要为这些类型的列设置默认值,可以考虑在应用层面进行处理,或者使用其他数据类型。

这些答复来源五花八门,不太具备正统性,有些理由看起来也有点怪怪的。后续我又在 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.

相关文档

bolb

why-cant-a-text-column-have-a-default-value-in-mysql

bug - mysql