variant类型的a字段本来存放的是json,update b字段时,a字段变成了错误的json字符串,转json失败

Viewed 14

Version 4.0.7,遇到问题的场景如下:
现有个表结构如下:

CREATE TABLE `test_variant` (
  `id` varchar(36) NOT NULL COMMENT "ID",
  `a` variant COMMENT "数据字段",
  `b` datetime COMMENT "时间字段",
)
UNIQUE KEY(`id`)
COMMENT '测试variant表'
DISTRIBUTED BY HASH(`id`) BUCKETS AUTO
PROPERTIES (
  "replication_num" = "3"
);

插入一条数据(JSON比较特殊,带转义符的)如下:

INSERT INTO test_variant VALUES ('1',{
    "title": "🐾₊⁺੯‧̀͡u\\",
    "date": "2026-04-11"
  }, NOW());

执行查询:
SELECT * FROM test_variant;
结果如下,符合预期
image.png
再执行一个语句:
UPDATE test_variant SET b = NOW();
在执行查询结果如下:
image.png
a字段是内容变成了前后有双引号的字符串:

"{\"title\":\"🐾₊⁺੯‧̀͡u\\\",\"date\":\"2026-04-11\"}"

问了AI给的结论是:Doris 的 UPDATE 不是原地更新,而是整行重写(读旧行 → 计算新行 → 删旧行 → 插新行),问题就出在读回再写回这个环节:variant 列原本存的是 JSON 数组(variant array),在整行重写时它的值被序列化成了 JSON 文本字符串 "[{...}]",写回时 variant 列把这段文本当成**字符串值(variant string)**而不是数组值,于是查询就变成前后带双引号了。
我不知道对不对,希望老师们解决一下

1 Answers