Mysql将默认值设置为json类型列

Posted

技术标签:

【中文标题】Mysql将默认值设置为json类型列【英文标题】:Mysql set default value to a json type column 【发布时间】:2020-07-24 21:34:21 【问题描述】:

听说8.0.13之前的mysql版本接受json类型列的默认值,所以我使用cmd:

ALTER TABLE templates CHANGE COLUMN values JSON NOT NULL DEFAULT '' ;

但收到错误:

Error Code: 1101. BLOB, TEXT, GEOMETRY or JSON column 'values' can't have a default value

那我该如何解决呢?

我正在使用 mysql 版本 8.0.19 和客户端工具 Workbench

【问题讨论】:

【参考方案1】:

documentation says:

BLOB、TEXT、GEOMETRY 和 JSON 数据类型只有在值写为表达式时才能被赋予默认值,即使表达式值是文字。

您可以通过用括号括住文字值来将默认值设为表达式:

ALTER TABLE templates CHANGE COLUMN values JSON NOT NULL DEFAULT ('') ;

或者:

ALTER TABLE templates CHANGE COLUMN values JSON NOT NULL DEFAULT (JSON_OBJECT()) ;

【讨论】:

请注意,这仅适用于版本 8.0.13 - 之前,e.g. in version 5.7,JSON 的默认值是不可能的。 (“不能为 BLOB、TEXT、GEOMETRY 和 JSON 数据类型分配默认值。”) 应该已经阅读了评论。如果您在 Aurora MySQL 5.7 中尝试此操作,则结果是错误消息:BLOB, TEXT, GEOMETRY or JSON column 'your_col_name' can't have a default value. (Error #1101)【参考方案2】:

MySql 语法与 Oracle/Postgres 有点不同,因此默认使用 JSON_Array,查询将是 -

ALTER TABLE table_name ALTER column_name SET DEFAULT (JSON_ARRAY());

进一步参考here

【讨论】:

以上是关于Mysql将默认值设置为json类型列的主要内容,如果未能解决你的问题,请参考以下文章

怎样设置mysql中的数据字段为默认值

MySql怎么给列设置默认值 mysql修改默认值

mysql怎么在创建表时设置默认时间为系统时间

将行恢复为默认列值mysql

MySql怎么给列设置默认值 mysql修改默认值

MySQL-数据库操作