Dreamer Dreamer
首页
  • 分类
  • 标签
  • 归档
关于
GitHub (opens new window)

lycpan233

白日梦想家
首页
  • 分类
  • 标签
  • 归档
关于
GitHub (opens new window)
  • Mysql

    • 浅谈char与varchar尾随空格对比
    • utf8存储emoji处理
    • Mysql 查询每个班级的前几名
    • Text为什么不支持设置默认值
    • Mysql 事务级别与差异
    • Mysql SQL 优化思路
  • Node

  • Go

  • Docker

  • 后端
  • Mysql
lycpan233
2024-09-02

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

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

# 相关文档

bolb (opens new window)

why-cant-a-text-column-have-a-default-value-in-mysql (opens new window)

bug - mysql (opens new window)

编辑 (opens new window)
上次更新: 2025/04/15, 03:48:14
Mysql 查询每个班级的前几名
Mysql 事务级别与差异

← Mysql 查询每个班级的前几名 Mysql 事务级别与差异→

最近更新
01
docker基础概念
02-26
02
js 获取变量准确类型
02-19
03
Mysql SQL 优化思路
02-18
更多文章>
Theme by Vdoing | Copyright © 2023-2025 Dreamer | MIT License
粤ICP备2025379918号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式