Gérer l'erreur "#1406 - Data too long for column" avec un handler
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:
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 :
Citation:
#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:
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 ?