MySQL 常用 DEFAULT 默认值一览表及容易踩的坑

 更新时间:2026年09月30日 11:56:23   作者:夜雪一千  
MySQL的DEFAULT默认值可以按数据类型和用途来划分,下面给大家分享MySQL常用DEFAULT默认值一览表,感兴趣的朋友跟随小编一起看看吧

⚠️ 注意:CURRENT_TIMESTAMP 不要加引号,写成 DEFAULT CURRENT_TIMESTAMP,写成 'CURRENT_TIMESTAMP' 会当成普通字符串,不是时间函数。
MySQL5.6.5+ 才支持 DATETIME 使用 CURRENT_TIMESTAMP;MySQL8.0 支持表达式默认值(需要包括号 DEFAULT (xxx))

一、时间类系统默认值(你重点关心的)

默认值写法适用字段类型说明示例
CURRENT_TIMESTAMPTIMESTAMP / DATETIME当前时间戳(日期+时分秒),插入时自动赋值created_at DATETIME DEFAULT CURRENT_TIMESTAMP
CURRENT_TIMESTAMP(n)TIMESTAMP(n) / DATETIME(n)带微秒,n=0~6dt DATETIME(3) DEFAULT CURRENT_TIMESTAMP(3)
CURRENT_DATEDATE当前日期(只有年月日),MySQL8.0+支持ct_date DATE DEFAULT (CURRENT_DATE)
CURRENT_TIMETIME当前时间(时分秒),MySQL8.0+支持t TIME DEFAULT (CURRENT_TIME)
ON UPDATE CURRENT_TIMESTAMPTIMESTAMP / DATETIME不是DEFAULT,是附加属性:该行其他字段更新时,自动刷新为本字段时间updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

❗ 坑:NOW() / SYSDATE() 不能直接放在 DEFAULT 里(MySQL5.7不支持,8.0可以写 DEFAULT (NOW()),但推荐统一用 CURRENT_TIMESTAMP)

二、常量默认值(所有版本通用)

默认值适用类型说明
NULL任意允许NULL字段默认空,col VARCHAR(20) DEFAULT NULL
''(空字符串)CHAR/VARCHAR/TEXT字符串空值
0TINYINT/INT/BIGINT/FLOAT数字默认0
1 / -1 / 99数值型自定义固定数字
'固定字符串'VARCHAR/CHAR固定文本,如 'unknown'
'0000-00-00'DATEDATE零值(sql_mode严格模式下不推荐)
'0000-00-00 00:00:00'DATETIME/TIMESTAMP时间零值(严格模式报错)

三、MySQL8.0+ 支持【表达式默认值】(必须带括号)

默认表达式字段类型说明
DEFAULT (UUID())CHAR/VARCHAR默认生成UUID字符串
DEFAULT (UUID_TO_BIN(UUID()))BINARY(16)UUID转二进制存储
DEFAULT (RAND())FLOAT默认随机数0~1
DEFAULT (JSON_ARRAY())JSON默认空json数组
DEFAULT (CURRENT_DATE + INTERVAL 1 DAY)DATE默认明天日期

四、各类型隐式默认值(不写DEFAULT时自动自带)

字段类型不写DEFAULT的隐式默认值
INT/TINYINT/BIGINT0(NOT NULL);NULL(允许NULL)
VARCHAR/CHAR''(NOT NULL);NULL(允许NULL)
DATE0000-00-00(NOT NULL);NULL
DATETIME0000-00-00 00:00:00(NOT NULL);NULL
TIMESTAMP受 explicit_defaults_for_timestamp 参数影响
CREATE TABLE test(
  id INT PRIMARY KEY AUTO_INCREMENT,
  name VARCHAR(32) DEFAULT '',
  status TINYINT DEFAULT 1,
  created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  create_date DATE DEFAULT (CURRENT_DATE),
  uuid_col CHAR(36) DEFAULT (UUID())
);

补充:

常用默认值速查

‌数值类型‌:INT DEFAULT 0、TINYINT DEFAULT 1、DECIMAL(10,2) DEFAULT 0.00 这类写法最常用,适合状态位、计数、金额等字段。‌‌

‌字符串类型‌:VARCHAR(50) DEFAULT '中国'、CHAR(1) DEFAULT 'M',适合国家、性别这类固定取值场景。‌‌

‌日期时间类型‌:DATETIME DEFAULT CURRENT_TIMESTAMP 取当前时间,TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 则能在更新记录时自动刷新时间,非常适合 create_time、update_time 字段。‌‌

‌布尔/枚举类型‌:BOOLEAN DEFAULT FALSE(存储为 0/1)、ENUM('active','inactive') DEFAULT 'pending',适合开关状态、业务状态流转场景。‌‌

下面这个建表语句基本覆盖了最常见的用法,可以直接参考:‌‌

CREATE TABLE `default_tb` (
  `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT '自增主键',
  `country` varchar(50) NOT NULL DEFAULT '中国',
  `col_status` tinyint NOT NULL DEFAULT 1 COMMENT '1:启用 2:停用',
  `is_deleted` tinyint NOT NULL DEFAULT 0 COMMENT '0:未删除 1:删除',
  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
  PRIMARY KEY (`id`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8;

⚠️ 容易踩的坑

  • ‌版本差异‌:MySQL 8.0 才支持 TEXT/BLOB 类型设置默认值,写法是 TEXT DEFAULT ('');5.7 及以下版本不支持。
  • ‌函数限制‌:只有 CURRENT_TIMESTAMP 可以直接作为默认值;UUID()、RAND()、NOW() 这些函数在 8.0.13 之前都不能直接写,之后需要加括号写成表达式形式,如 DEFAULT (UUID())。
  • ‌NULL 与空字符串‌:DEFAULT NULL 表示“未知”,DEFAULT '' 表示“有值但为空文本”,两者语义完全不同,别混用。
  • ‌修改默认值‌:用 ALTER TABLE... ALTER COLUMN... SET DEFAULT 修改,DROP DEFAULT 删除。‌‌

🛠️ 操作小贴士

  • 新增字段时直接带默认值:ALTER TABLE test_tb ADD COLUMN col3 varchar(20) NOT NULL DEFAULT 'abc';
  • 修改已有默认值:ALTER TABLE test_tb ALTER COLUMN col3 SET DEFAULT '3a';
  • 删除默认值:ALTER TABLE test_tb ALTER COLUMN col3 DROP DEFAULT;‌‌

日常开发里,时间戳、逻辑删除标记、状态位这三个场景是默认值用得最多的,建议把上面那个建表语句存成模板,建新表时直接改字段名就行。

到此这篇关于MySQL 常用 DEFAULT 默认值一览表的文章就介绍到这了,更多相关mysql default默认值内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

最新评论