การเก็บ JSON ใน MySQL ด้วย PHP

by Little Bear @24 พ.ค. 66 13:39 ( IP : 171...55 ) | Tags : PHP , JSON , MySQL

เดิมเคยเก็บโดยการแปลงด้วยคำสั่ง jsonencode แต่มักจะเกิดปัญหาเมื่อมีอักขระบางตัวหรือการขึ้นบรรทัดใหม่ ซึ่งจะทำให้ไม่สามารถแปลงกลับด้วยคำสั่ง jsondecode

แต่....

MySQL version 5.7.8 ได้เพิ่ม JSON data type ให้แล้ว (แม้ว่าเมื่อเลือกเป็น JSON data type แล้ว MySQL ก็จะเก็บเป็น longtext type ก็ตาม)

และมีคำสั่งเฉพาะในการจัดการกับข้อมูล เช่น

JSONOBJECT,
JSONARRAY,
JSONMERGEPRESERVE,
 JSONMERGEPATCH,
 JSONTYPE,
 JSONEXTRACT,
 JSONINSERT,
 JSONREPLACE,
 JSONSET,
 JSONREMOVE

JSON-SET:

UPDATE iot
SET dataJson = JSON-SET(
    dataJson,
    "$.test",
    "1"
)
WHERE nodeDataId=3

JSON-REPLACE จะบันทึกค่าทับของเดิม แต่หากของเดิมไม่เคยมี key นั้นอยู่ ก็จะไม่มีการบันทึกข้อมูลใหม่ลงไป

JSON-SET จะบันทึกข้อมูลทับของเดิม หากยังไม่เคยมี key นั้นอยู่ ก็จะสร้างเพิ่มให้โดยอัตโนมัติ

ลองดูรายละเอียดได้จาก How To Work with JSON in MySQL

ที่มา