MariaDB / MySQL : Erreur JSON lors de la création d’un utilisateur

MariaDB / MySQL : Erreur JSON lors de la création d’un utilisateur
4 (80%) 5 votes

Type JSON erreur sur Symfony 4 avec MySQL / MariaDB

Symfony 4 : Création base de données erreur type JSON

Ce problème de création de base de données de données n’est pas spécifique à Symfony ni même à Doctrine. Cette erreur est une erreur SQL signifiant que votre base de données ne connaît pas le type JSON.

Création d’un champ de type JSON en base de données

J’ai lancé la commande suivante sur Symfony me permettant de créer le schéma de ma base de données (mes tables).

php bin/console doctrine:schema:create

Pour ce faire j’utilise Doctrine, j’avais la variable annotée suivante dans mon entité.

/**
* @ORM\Column(type="json")
*/
private $roles= [];

Lorsque la commande  ci-dessus était exécutée, on obtenait l’erreur suivante :

SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaD
B server version for the right syntax to use near 'JSON NOT NULL, password VARCHAR(255) NOT NULL, UNIQUE INDEX UNIQ_8D93D649E7927C7' at line 1

La version longue de cette erreur :

Schema-Tool failed with Error 'An exception occurred while executing 'CREATE TABLE user (id INT AUTO_INCREMENT NOT NULL, email VARCHAR(180) NO
T NULL, roles JSON NOT NULL, password VARCHAR(255) NOT NULL, UNIQUE INDEX UNIQ_8D93D649E7927C74 (email), PRIMARY KEY(id)) DEFAULT CHARACTER SE
T utf8mb4 COLLATE utf8mb4_unicode_ci ENGINE = InnoDB':

SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaD
B server version for the right syntax to use near 'JSON NOT NULL, password VARCHAR(255) NOT NULL, UNIQUE INDEX UNIQ_8D93D649E7927C7' at line 1
' while executing DDL: CREATE TABLE user (id INT AUTO_INCREMENT NOT NULL, email VARCHAR(180) NOT NULL, roles JSON NOT NULL, password VARCHAR(2
55) NOT NULL, UNIQUE INDEX UNIQ_8D93D649E7927C74 (email), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ENGINE = I
nnoDB

Serveur de base de données pas à jour

La base de données m’indique qu’elle ne connaît pas le type « JSON », or il existe bel et bien :

Je vérifie donc sur ma machine le serveur de base de données utilisé :

alex@antergos:~$ mysql --version
mysql Ver 15.1 Distrib 10.1.36-MariaDB, for Linux (x86_64) using readline 5.1

MariaDB 10.1.36 < MariaDB 10.2.7, le type de colonne JSON n’a pas encore été implémenté.

Pourtant étant sur Antergos lui même basé sur ArchLinux réputé pour avoir les paquets les plus à jour dans ses dépôts, je suis étonné de constater que ce ne l’est pas.

Solution : Mettre sa base de données à jour pour supporter le type JSON

Tout simplement, il faut mettre à jour votre serveur de base de données si vous voulez pouvoir utiliser le type de donnée JSON dans vos colonnes.

Si vous êtes chez un prestataire, demandez-lui de le faire pour vous, mais pensez à faire vos sauvegardes au cas où.

Pour sauvegarder toutes ses base de données avant la mise à jour :

$ mysqldump -u root -p --all-databases > databases.sql

https://stackoverflow.com/questions/9497869/export-and-import-all-mysql-databases-at-one-time

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.