Dav*_*kam 11 mysql sql json create-table mysql-workbench
我听说 8.0.13 之前的 mysql 版本接受 json 类型列的默认值,所以我使用 cmd:
ALTER TABLE templates CHANGE COLUMN values JSON NOT NULL DEFAULT '{}' ;
Run Code Online (Sandbox Code Playgroud)
但收到错误:
Error Code: 1101. BLOB, TEXT, GEOMETRY or JSON column 'values' can't have a default value
Run Code Online (Sandbox Code Playgroud)
那么我该如何解决呢?
我正在使用 mysql 版本 8.0.19 和客户端工具 Workbench
GMB*_*GMB 16
该文件说:
BLOB、TEXT、GEOMETRY 和 JSON 数据类型只有在将值写为表达式时才可以分配默认值,即使表达式值是文字。
您可以通过用括号将字面值括起来来使默认表达式成为表达式:
ALTER TABLE templates CHANGE COLUMN values JSON NOT NULL DEFAULT ('{}') ;
Run Code Online (Sandbox Code Playgroud)
或者:
ALTER TABLE templates CHANGE COLUMN values JSON NOT NULL DEFAULT (JSON_OBJECT()) ;
Run Code Online (Sandbox Code Playgroud)
小智 13
根据 laravel 文档:
$table->json('movies')->default(new Expression('(JSON_ARRAY())'));
Run Code Online (Sandbox Code Playgroud)
默认修饰符接受一个值或 Illuminate\Database\Query\Expression 实例。使用 Expression 实例将阻止 Laravel 将值括在引号中,并允许您使用数据库特定的函数。一种特别有用的情况是当您需要为 JSON 列分配默认值时
https://laravel.com/docs/8.x/migrations#default-expressions
小智 5
MySql 语法与 Oracle/Postgres 略有不同,因此要将 JSON_Array 作为默认值,查询将是 -
ALTER TABLE table_name ALTER column_name SET DEFAULT (JSON_ARRAY());
Run Code Online (Sandbox Code Playgroud)
进一步参考这里
| 归档时间: |
|
| 查看次数: |
8270 次 |
| 最近记录: |