Impossible de définir la variable BOOL de MySQL sur la valeur BOOL d'un JSON ?
P粉707235568
P粉707235568 2023-09-03 10:57:44
0
1
485
<p>Version MySQL : 8.0.27</p> <p>Cela n’a aucun sens pour moi. J'ai la définition suivante : </p> <pre class="brush:php;toolbar:false;">DECLARE p_array_only bool DEFAULT IFNULL(JSON_EXTRACT(in_parameters, '$.array_only'),FALSE);</pre> <p>Si je transmets une structure JSON correcte : </p> <pre class="brush:php;toolbar:false;">{"array_only":true}</pre> <p>J'obtiens l'erreur : </p> <pre class="brush:php;toolbar:false;">La valeur 'true' pour la colonne 'p_array_only' dans la ligne 1 est incorrecte</pre> <p>Notez que si j'omets complètement la clé, cela fonctionne (car IFNULL renvoie Null et est défini sur FALSE). </p> <p>Que s’est-il passé ? Toutes les autres affectations de code JSON fonctionnent correctement (INT, Text, SMALLINT, etc.) - le format est exactement le même. Et je suis sûr que ce code aurait fonctionné il y a quelques mois (en utilisant la version 8.0.24). </p> <p>J'ai même essayé : </p> <pre class="brush:php;toolbar:false;">IFNULL(IF(JSON_EXTRACT(@test1, '$.array_only') IS TRUE,TRUE,FALSE),FALSE)</pre> <p>Même erreur. </p> <p>Alors, comment puis-je simplement convertir une valeur BOOL JSON vrai/faux en une valeur BOOL MySQL dans la version 8.0.27 ? </p>
P粉707235568
P粉707235568

répondre à tous(1)
P粉541796322

BOOLEAN n'est pas un type de données intégré à MySQL. Il s'agit d'un alias implémenté sous la forme TINYINT(1).

Voir https://dev.mysql.com/doc/refman/8.0/en/numeric-type-syntax.html


Utiliser la conversion implicite du type de données :

DECLARE p_array_only BOOL 
    DEFAULT IFNULL(0 + JSON_EXTRACT(in_parameter, '$.array_only'), FALSE);

Échoue si la valeur correspondante est de type chaîne ou null.

https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=9c5fac2c7533d9e365a449ce00c06f1b

PS. Le formulaire court DEFAULT IFNULL(0 + in_parameter->'$.array_only', FALSE); est également utile.

PPS Bien sûr, CAST() explicite peut également être utilisé.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal