JSON тип данных и MariaDB

json_logomariadb_logo

 

В одном из проектов в базе данных MySQL у меня было поле с типом данных типа JSON, где хранились данные формы.

Все было хорошо до того момента как я перенес проект с локального сервера на рабочий. При импорте базы данных я получил ошибку создания таблицы. Выглядело это примерно так:

MariaDB [big_project]> CREATE TABLE testing (my_field JSON);
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ‘JSON)’ at line 1

 

После прочтения документации MariaDB я выяснил, что на текущий момент в движке MariaDB нет поддержки типа данных «JSON» и пока не планируется.

Anders Karlsson подробно описал это в своем посте: https://mariadb.com/resources/blog/json-with-mariadb-10-2/

Впрочем, начиная с версии MariaDB 10.2.7 разработчики MariaDB ввели псевдоним «JSON» к типу данных «LONGTEXT». То есть, начиная с версии 10.2.7 теперь можно определить тип данных как «JSON» и MariaDB не выдаст ошибки, хотя по факту это будет  тип «LONGTEXT». Подробнее: https://mariadb.com/kb/en/library/json-data-type/. В этой же статье описаны нюансы миграции/взаимодействия MySQL и MariaDB в случах миграции БД или ее репликации между этими движками.

Действительно, на рабочем сервере оказалась версия MariaDB 10.1.26, где этого псевдонима еще не было.

 

MariaDB [big_project]> select @@version;
+—————————+
| @@version |
+—————————+
| 10.1.26-MariaDB |
+—————————+
1 row in set (0.00 sec)

 

В моем случае обновлять MariaDB на рабочем сервере пока было нельзя, да и «LONGTEXT» не был особенно нужен, поэтому я просто заменил в дампе базы данных все типы «JSON» на «TEXT», не трогая ничего на сервере, этого вполне хватило.

Также нашел пакет поддержки JSON-MariaDB для фрэймворка Laravel.  Тем, кто пользуется Laravel   и не имеет возможности менять версии ПО на сервере этот пакет  может быть полезен, после его установки в скрипте миграции БД можно указывать тип «JSON»:

 

$table->json(‘my_field’)

В итоге, те, у кого нет возможности обновить версию MariaDB до 10.2.7 и выше, могут просто заменить тип поля с «JSON» на «TEXT» или «LONGTEXT», в зависимости от потребностей.

Напишите комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *