Banco de Dados

21 ago, 2017

MariaDB: JSON datatype suportado a partir da versão 10.2

Publicidade

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.

 

***

 

Mattias Geniar faz parte do time de colunistas internacionais do iMasters. A tradução do artigo é feita pela Redação iMasters, com autorização do autor, e você pode acompanhar o artigo em inglês no link: https://ma.ttias.be/mariadb-json-datatype-supported-10-2/