场景
现在有一个这样的需求,有一张表,又一个字段原本用的varchar类型,但因为一些查询的需要需要改为json类型,表结构如下
CREATE TABLE `test_table` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增id',
`name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci default '' COMMENT '名称',
PRIMARY KEY (`id`)
) ENGINE = InnoDB COMMENT = '测试表';
模拟插入数据
insert into test_table (name)value ('["测试数据"]');
insert into test_table (name)value (null);
insert into test_table (name)value ('');
数据库中的数据如上图,现在进行转换json字段,修改失败了
ALTER TABLE test_table CHANGE name name JSON COMMENT '名称';
将存储的数据结构不为json的改成json结构后更新成功
update test_table set name = '[]' where name = '' or name is null;
ALTER TABLE test_table CHANGE name name JSON COMMENT '名称';
结论是vachar改json需要存量数据都是json格式才能进行变更