在使用MySQL5.7虚拟列功能时,发现DATE/DATETIME/TIMESTAMP类型的虚拟列无法插入数据,问题如下:
CREATE TABLE `test` (
`json` TEXT NULL,
`date` DATETIME NULL DEFAULT NULL,
`v_date` DATE AS (json_extract(`json`,'$.date')) VIRTUAL
);
INSERT INTO test (json) VALUES ('{"date":"2019-01-21 00:00:00"}');
ERROR 3156 (22018): Invalid JSON value for CAST to DATE/TIME/DATETIME/TIMESTAMP from column json_extract at row 1
后来发现了MySQL提供的函数:json_unquote(),作用是去除json的引号。采用该函数后可以正常插入日期类型
CREATE TABLE `test_virtual_column` (
`json` JSON NULL DEFAULT NULL,
`date` DATETIME NULL DEFAULT NULL,
`v_date` DATETIME AS (json_unquote(json_extract(`json`,'$.date'))) VIRTUAL
)
INSERT INTO `test`.`test_virtual_column` (`json`) VALUES ('{"date": 20191221}');