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;
结果如下,符合预期

再执行一个语句:
UPDATE test_variant SET b = NOW();
在执行查询结果如下:

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