JSON

JSON в MySQL і MariaDB не сумісні!

Тип JSON у MySQL зберігає об’єкт JSON у компактній формі, а не як LONGTEXT, як у MariaDB. Це означає, що реплікація на основі рядків не працюватиме для типів JSON із MySQL у MariaDB.

У MySQL JSON є об’єктом і порівнюється відповідно до значень json. У MariaDB рядки JSON є звичайними рядками та порівнюються як рядки. Одним винятком є ​​використання JSON_EXTRACT(), у цьому випадку рядки не екрануються перед порівнянням.

Є кілька способів перемістити таблицю в MariaDB:

Конструкція

CREATE TABLE `tablename` (
  `json_data` JSON DEFAULT NULL,
  ...

перетворюється (MariaDB) у таку:

CREATE TABLE `tablename` (
  `json_data` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL CHECK (json_valid(`json_data`)),
  ...

Python

Якщо не перетворити об’єкт у json-рядок в поле типу JSON БД потрапить NULL

В базу:

json_field = json.dumps(json_obj, separators=(',',':'))

separators (роздільники) мають бути кортежем (item_separator, key_separator). За замовчуванням: (',', ': '), якщо відступ indent не None. Щоб отримати найбільш компактне представлення JSON, необхідно вказати (',', ':') - без пробілів.

З бази:

if res[i].json_field is None:
    json_obj = None
else:
    json_obj = json.loads(res[i].json_field)

Last updated