2015-08-28 28 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字符串輸出當心有時動態列可以是動態的疼痛

乾杯