Bonjour,

Je souhaite gérer les erreurs renvoyées par MariaDB dans mes procédures. J'y arrive bien avec les erreurs de contraintes (clés étrangères non satisfaites, unicité non respectée) avec ce genre de mécanisme :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
	DECLARE constraint_exception CONDITION FOR SQLSTATE '23000'; -- Erreur de contrainte
	DECLARE EXIT HANDLER FOR constraint_exception
		BEGIN
			GET DIAGNOSTICS @nb_errors = NUMBER;
			GET DIAGNOSTICS CONDITION @nb_errors
				@errno = MYSQL_ERRNO, @text = MESSAGE_TEXT;
 
			IF LOCATE('fk_tel_id_personne', @text) > 0 THEN 
				SET @errno = 10019;
				SET @text = 'Identifiant de la personne inconnu';
			ELSEIF LOCATE('fk_tel_id_type_telephone', @text) > 0 THEN
				SET @errno = 10020;
				SET @text = 'Identifiant du type de numéro de téléphone non valide';
			ELSEIF LOCATE('xu_tel_numero', @text) > 0 THEN 
				SET @errno = 10022;
				SET @text = 'Numéro de téléphone déjà enregistré pour cette personne et de ce type de numéro';
			END IF;
 
			SIGNAL SQLSTATE VALUE '23000'
			SET MYSQL_ERRNO = @errno, MESSAGE_TEXT = @text;
		END;
Mais si la donnée, par exemple de type VARCHAR(20), fournie en entrée de ma procédure est trop longue (plus de 20 caractères), j'obtiens une erreur :
#1406 - Data too long for column 'numero' at row 2
J'ai essayé d'utiliser le même mécanisme que ci-dessus pour gérer ce cas d'erreur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
	DECLARE too_long_exception CONDITION FOR SQLSTATE '22001'; -- Donnée d'entrée trop longue
	DECLARE EXIT HANDLER FOR too_long_exception
		BEGIN
			GET DIAGNOSTICS @nb_errors = NUMBER;
			GET DIAGNOSTICS CONDITION @nb_errors
				@errno = MYSQL_ERRNO, @text = MESSAGE_TEXT;
 
			IF LOCATE('numero', @text) > 0 THEN
				SET @errno = 10021;
				SET @text = 'Numéro de téléphone trop court ou trop long';
			END IF;
 
			SIGNAL SQLSTATE VALUE '22001'
			SET MYSQL_ERRNO = @errno, MESSAGE_TEXT = @text;
		END;
Mais j'obtiens toujours le message d'erreur en anglais de MariaDB plutôt que mon message personnalisé en français.

Une idée de la cause et d'une solution ?