【问题标题】:Mysql set default value to a json type columnMysql将默认值设置为json类型列
【发布时间】: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

【问题讨论】:

    标签: mysql sql json mysql-workbench create-table


    【解决方案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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-28
      • 2018-08-23
      • 2016-12-22
      • 2013-03-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多