2015-08-28 29 views
0

是否有可能一个JSON列表字段中MariaDB的取样类似的存储低于使用动态列的MariaDB的SQL INSERT语句:如何JSON数据与表转换成使用动态列

{ 
    "myfield": "value1", 
    "myList": ["item1" , "item2", "item3"] 
} 
+0

任何事情都可能发生,但没有任何理由为什么您想要这样做 – Strawberry

+0

JSON输出来自第三方系统,我希望将其存储在数据库中以便稍后处理。 –

+1

我想你应该改变你的问题:如何将给定的JSON转换为使用动态列的MariaDB SQL插入语句,如此处所述。 https://mariadb.com/kb/en/mariadb/dynamic-columns/您应该指定您计划使用哪种编程语言。 – Risadinha

回答

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"} | 
+----------------------------------------------------------------+ 

搏一搏!

** 不要忘记验证像或的TextWrangler记事本++

** 任何网上验证或文本编辑器的JSON字符串输出当心有时动态列可以是动态的疼痛

干杯