☰
MySQL 非时间类系统函数默认值(**MySQL8.0.13+ 才支持表达式默认,必须包括号 `()`;5.7只支持常量,不能用下面这些函数**)
2026/9/28 20:47:10 网站建设 项目流程

重点:DEFAULT (函数()),括号不能省略;只有CURRENT_TIMESTAMP特例可以不带括号。

默认表达式适用字段类型说明建表示例
UUID()CHAR(36) / VARCHAR(36)生成字符串形式UUID,插入自动生成唯一字符串uuid_str CHAR(36) DEFAULT (UUID())
UUID_TO_BIN(UUID())BINARY(16)UUID转二进制,节省存储空间,查询更快uuid_bin BINARY(16) DEFAULT (UUID_TO_BIN(UUID()))
BIN_TO_UUID(二进制uuid)CHAR(36)二进制UUID转回字符串(一般不作为默认值,多用于查询)-
RAND()FLOAT / DOUBLE0~1之间随机浮点数rand_num FLOAT DEFAULT (RAND())
JSON_ARRAY()JSON默认空JSON数组[]json_arr JSON DEFAULT (JSON_ARRAY())
JSON_OBJECT()JSON默认空JSON对象{}json_obj JSON DEFAULT (JSON_OBJECT())
DATABASE()VARCHAR当前数据库名db_name VARCHAR(64) DEFAULT (DATABASE())
CURRENT_USER()VARCHAR当前认证登录用户(user@host)login_user VARCHAR(100) DEFAULT (CURRENT_USER())
SYSTEM_USER()VARCHAR同USER(),客户端连接账号conn_user VARCHAR(100) DEFAULT (SYSTEM_USER())
CONNECTION_ID()INT当前会话连接IDconn_id INT DEFAULT (CONNECTION_ID())
POINT(0,0)POINT(空间几何)空间点默认坐标(0,0)loc POINT DEFAULT (POINT(0,0))

二、通用常量默认值(MySQL5.7 / 8.0 全部版本通用,直接写,不用括号)

默认值适用类型业务用途
NULL任意允许NULL字段未赋值为null
''VARCHAR / CHAR空字符串(推荐业务常用)
0TINYINT/INT/BIGINT/DECIMAL数字默认0,状态、数量
0.00DECIMAL(10,2)金额默认0
TRUE/FALSEBOOLEAN(底层是TINYINT)布尔标记,等价1/0
'固定文本'VARCHAR/CHAR固定枚举字符串,如'normal'
枚举第一个值ENUMENUM默认是枚举列表第一项

三、补充注意事项(坑)

  1. MySQL5.7:不支持除 CURRENT_TIMESTAMP 以外任何函数写在DEFAULT,DEFAULT (UUID())直接报错,5.7要UUID只能应用层生成。
  2. BLOB / TEXT:8.0要设置默认值也必须写成表达式形式,例如text_col TEXT DEFAULT ('')。
  3. 表达式默认不能用子查询、用户自定义函数、存储过程。
  4. 带随机/会话相关函数(UUID,RAND,CURRENT_USER)做主从复制,binlog建议ROW模式,STATEMENT模式会告警。

完整建表示例(8.0)

CREATETABLEdemo(idINTPRIMARYKEYAUTO_INCREMENT,uuid_strCHAR(36)DEFAULT(UUID()),uuid_binBINARY(16)DEFAULT(UUID_TO_BIN(UUID())),random_valFLOATDEFAULT(RAND()),meta_json JSONDEFAULT(JSON_ARRAY()),created_dbVARCHAR(64)DEFAULT(DATABASE()),operatorVARCHAR(100)DEFAULT(CURRENT_USER()),statusTINYINTDEFAULT0,remarkVARCHAR(255)DEFAULT'');

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询