Digamos que você tenha a seguinte declaração CREATE TABLE que deseja executar em uma instância do MariaDB.
CREATE TABLE `test` ( `id` int unsigned not null auto_increment primary key, `value` json null ) default character set utf8mb4 collate utf8mb4_unicode_ci
Você pode ser saudado com esta mensagem de erro;
SQLSTATE[42000]: Syntax error or access violation: 1064 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 null at line 1
A sintaxe inteligente é tudo de bom, mas o JSON datatype é realmente muito novo, e é apenas “suportado” (esses parênteses logo ficarão claros) a partir do MariaDB 10.2.
Antes de qualquer coisa: certifique-se de executar a versão mais recente do MariaDB.
MariaDB> select @@version; +-----------------+ | @@version | +-----------------+ | 10.0.31-MariaDB | +-----------------+
Se você estiver em uma versão mais antiga, atualize até chegar ao MariaDB 10.2.
MariaDB> select @@version; +----------------+ | @@version | +----------------+ | 10.2.7-MariaDB | +----------------+
Então, esteja ciente de que a implementação do MariaDB JSON é ligeiramente diferente do MySQL, conforme explicado no MDEV-9144.
Os tipo de dados JSON contradizem diretamente o padrão SQL, que diz que as funções JSON_ * pegam uma sequência de caracteres como um argumento.
Além disso, a velocidade do MariaDB não precisa do JSON binário, de acordo com nossos benchmarks, nosso analisador JSON é tão rápido no texto JSON como o MySQL no JSON binário.
[…]
Vamos adicionar JSON “type” para compatibilidade com o MySQL, no entanto.
E como uma observação final:
Adicionamos JSON como um alias para TEXT.
Portanto, nos bastidores, um tipo de dados JSON é realmente um tipo de dados TEXT. Mas, pelo menos, essas consultas CREATE TABLE realmente funcionarão.
Essa mesma declaração CREATE TABLE acima é traduzida para isto no MariaDB:
MariaDB> SHOW CREATE TABLE test; CREATE TABLE `test` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `value` text COLLATE utf8mb4_unicode_ci DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
Observe o tipo de dados TEXT para a coluna ‘valor’, que eu especifiquei como JSON.
***