Maison  >  Questions et réponses  >  le corps du texte

Impossible de définir la variable BOOL de MySQL sur la valeur BOOL d'un JSON ?

<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粉707235568P粉707235568413 Il y a quelques jours447

répondre à tous(1)je répondrai

  • P粉541796322

    P粉5417963222023-09-04 00:14:38

    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é.

    répondre
    0
  • Annulerrépondre