是否可以使用动态列在MariaDB中存储JSON列表字段,如下例所示:
{
"myfield": "value1",
"myList": ["item1" , "item2", "item3"]
}
答案 0 :(得分:1)
遗憾的是,MariaDB动态列本身不支持JSON数组列表,虽然这是一个修复,并且可以更好地使用INTEGERS,但您可以尝试使用字符串。
ALTER TABLE `your_table` ADD COLUMN `dynamic_column` BLOB NULL DEFAULT
NULL ;
您将数组列表存储为动态列
中的字符串INSERT INTO
your_table (dynamic_column)
VALUES
(COLUMN_CREATE('myfield','value1'
,'myList','["item1" , "item2", "item3"]')
);
OR
UPDATE
your_table
SET
dynamic_column = COLUMN_CREATE('myfield','value1'
,'myList','["item1" , "item2", "item3"]'
)
WHERE
id = your_id ;
到目前为止,现在有了很好的部分。如何在不破坏格式的情况下返回。使用替换功能:
SELECT REPLACE(REPLACE(COLUMN_JSON(dynamic_column),'"[','['),']"',']') FROM your_table ;
您也可以快速测试输出而无需创建任何表格。
SET @tmp= COLUMN_CREATE('myfield','value1','myList','[ "item1" , "item2" , "item3" ]' ) ;
SELECT REPLACE(REPLACE(COLUMN_JSON(@tmp),'"[','['),']"',']') json_string;
如果输出使用'\'输出json格式:
+----------------------------------------------------------------------+
| json_string |
+----------------------------------------------------------------------+
| {"myList":[ \"item1\" , \"item2\" , \"item3\" ],"myfield":"value1"} |
+----------------------------------------------------------------------+
然后尝试类似
的内容 SELECT REPLACE(REPLACE(REPLACE(COLUMN_JSON(@tmp),'"[','['),']"',']'),'\\','') json_string;
+----------------------------------------------------------------+
| json_string |
+----------------------------------------------------------------+
| {"myList":[ "item1" , "item2" , "item3" ],"myfield":"value1"} |
+----------------------------------------------------------------+
给它开始!!
** 不要忘记在任何在线验证器或文本编辑器上验证json字符串输出,如textwrangler或notepad ++
** 请注意,有时动态列可能是动态的痛苦
干杯
答案 1 :(得分:0)
CAST可以替换为 JSON_MERGE('{“ key”:“ val”}',JSON_OBJECT());