ホームページ  >  に質問  >  本文

MySQL の BOOL 変数を JSON の BOOL 値に設定できませんか?

<p>MySQL バージョン: 8.0.27</p> <p>これは私にとって意味がありません。次の定義があります: </p> <pre class="brush:php;toolbar:false;">DECLARE p_array_only bool DEFAULT IFNULL(JSON_EXTRACT(in_parameters, '$.array_only'),FALSE);</pre> <p>正しい JSON 構造を渡した場合: </p> <pre class="brush:php;toolbar:false;">{"array_only":true}</pre> <p>エラーが発生します:</p> <pre class="brush:php;toolbar:false;">行 1 の列 'p_array_only' の値 'true' が正しくありません</pre> <p>キーを完全に省略しても機能することに注意してください (IFNULL は Null を返し、FALSE に設定されるため)。 </p> <p>何が起こったのですか? JSON からの他のすべてのコード割り当て (INT、Text、SMALLINT など) は正常に機能します。形式はまったく同じです。そして、このコードは数か月前 (8.0.24 を使用) には機能していたと確信しています。 </p> <p>私も試してみました: </p> <pre class="brush:php;toolbar:false;">IFNULL(IF(JSON_EXTRACT(@test1, '$.array_only') IS TRUE,TRUE,FALSE),FALSE)</pre> <p>同じエラーです。 </p> <p>それでは、8.0.27 で true/false BOOL JSON 値を BOOL MySQL 値に簡単に変換するにはどうすればよいでしょうか? </p>
P粉707235568P粉707235568413日前453

全員に返信(1)返信します

  • P粉541796322

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

    BOOLEAN は MySQL の組み込みデータ型ではありません。これはエイリアスであり、TINYINT(1) として実装されます。

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


    暗黙的なデータ型変換を使用します:

    リーリー

    対応する値の型が文字列または null の場合は失敗します。

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

    PS. 短い形式の DEFAULT IFNULL(0 in_parameter->'$.array_only', FALSE); も便利です。

    PPS. もちろん、明示的な CAST() も使用できます。

    返事
    0
  • キャンセル返事