В одном из проектов в базе данных MySQL у меня было поле с типом данных типа 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, где этого псевдонима еще не было.
+—————————+
| @@version |
+—————————+
| 10.1.26-MariaDB |
+—————————+
1 row in set (0.00 sec)
В моем случае обновлять MariaDB на рабочем сервере пока было нельзя, да и «LONGTEXT» не был особенно нужен, поэтому я просто заменил в дампе базы данных все типы «JSON» на «TEXT», не трогая ничего на сервере, этого вполне хватило.
Также нашел пакет поддержки JSON-MariaDB для фрэймворка Laravel. Тем, кто пользуется Laravel и не имеет возможности менять версии ПО на сервере этот пакет может быть полезен, после его установки в скрипте миграции БД можно указывать тип «JSON»:
В итоге, те, у кого нет возможности обновить версию MariaDB до 10.2.7 и выше, могут просто заменить тип поля с «JSON» на «TEXT» или «LONGTEXT», в зависимости от потребностей.