Как хранить json в mysql?

Пользователь

от ottilie.farrell , в категории: SQL , 3 года назад

Как хранить json в mysql?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от dmitrypro77 , 3 года назад

@ottilie.farrell Если Вы используете MySQL версию до 5.7 то вероятнее всего нужно будет создать колонку как строка и кодировать в Json перед сохранением и раскодировать обратно после получения данных. Если Вы используете mysql 5.7 и выше то там уже есть json тип данных, посмотрите ниже как можно легко создать колонку JSON и получать данные из нее:


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
CREATE TABLE example (id INT, data JSON);

INSERT INTO example VALUES (1, JSON_OBJECT('username', 'john', 'age', 18));

select * from example;
# Вывод: john
SELECT JSON_EXTRACT(data, '$.username') from example;

# Вывод: 18
SELECT data->>'$.age' from example;


Всегда открыт для интересных проектов. Ссылки на мои соц. сети в профиле.

Пользователь

от akeem , 2 года назад

@ottilie.farrell 

Существует несколько способов хранения JSON в MySQL:

  1. Как текстовую строку: JSON может быть сохранен как текстовая строка в столбце типа VARCHAR или TEXT. Этот подход не требует никаких особых действий при создании таблицы, но может ограничивать возможности работы с данными JSON.
  2. Как BLOB: JSON может быть сохранен как двоичные данные в столбце типа BLOB. Для этого нужно использовать функцию JSON_ENCODE() для преобразования данных JSON в двоичный формат при сохранении, и функцию JSON_DECODE() для обратного преобразования при извлечении данных.
  3. Как тип данных JSON: начиная с версии MySQL 5.7, существует тип данных JSON, который можно использовать для хранения данных в формате JSON. Это позволяет использовать различные функции MySQL для работы с данными JSON, такие как JSON_EXTRACT() и JSON_SEARCH().


Пример создания таблицы с использованием типа данных JSON:

1
2
3
4
CREATE TABLE my_table (
    id INT PRIMARY KEY,
    data JSON
);


Пример вставки данных в таблицу:

1
INSERT INTO my_table (id, data) VALUES (1, '{"name": "John", "age": 30}');


Пример извлечения данных:

1
SELECT data->>'$.name' as name, data->>'$.age' as age FROM my_table WHERE id = 1;


В данном примере используется оператор ->> для извлечения данных из поля data в формате JSON. Функция JSON_EXTRACT() может быть использована для более сложных запросов извлечения данных.