将MySQL与下表配合使用:
CREATE TABLE participants (
id INT AUTO_INCREMENT PRIMARY KEY,
puuid CHAR(36) NOT NULL,
data JSON,
project INT GENERATED ALWAYS AS (JSON_UNQUOTE(JSON_EXTRACT(data, '$.project'))) STORED NULL,
schoolCode VARCHAR(255) GENERATED ALWAYS AS (JSON_UNQUOTE(JSON_EXTRACT(data, '$.schoolCode'))) STORED,
UNIQUE KEY (puuid)
);
当我试着跑的时候:
insert into participants(puuid,data) values('aasd','{"project":1}');
它解决了一个问题 但当我try 的时候
insert into participants(puuid,data) values('aasd1','{"project":null}');
我收到一个错误,内容是:
Error Code: 1366. Incorrect integer value: 'null' for column 'project' at row 1
我又查了一遍
show columns from participants;
它会返回
为什么它不允许JSON对项目具有空值,即使它声明项目列允许空值?
除了这样的解决方案之外,没有其他解决方案了吗:
project INT GENERATED ALWAYS AS (COALESCE(JSON_UNQUOTE(JSON_EXTRACT(data, '$.project')), 0)) STORED NULL,
最新情况: 实际上似乎两者都不是
project INT GENERATED ALWAYS AS (COALESCE(JSON_UNQUOTE(JSON_EXTRACT(data, '$.project')), 0)) STORED NULL,
也不是
project INT GENERATED ALWAYS AS (IFNULL(JSON_UNQUOTE(JSON_EXTRACT(data, '$.project')), 0)) STORED NULL,
工作. 我即将放弃这个生成专栏的 idea .