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类型列的主要内容,如果未能解决你的问题,请参考以下文章