Tidak dapat menetapkan pembolehubah BOOL MySQL kepada nilai BOOL JSON?
P粉707235568
P粉707235568 2023-09-03 10:57:44
0
1
484
<p>Versi MySQL: 8.0.27</p> <p>Ini tidak masuk akal bagi saya. Saya mempunyai definisi berikut: </p> <pre class="brush:php;toolbar:false;">DECLARE p_array_only bool DEFAULT IFNULL(JSON_EXTRACT(in_parameters, '$.array_only'),FALSE);</pre> <p>Jika saya lulus struktur JSON yang betul: </p> <pre class="brush:php;toolbar:false;">{"array_only":true}</pre> <p>Saya mendapat ralat: </p> <pre class="brush:php;toolbar:false;">Nilai 'true' untuk lajur 'p_array_only' dalam baris 1 adalah salah</pre> <p>Perhatikan bahawa jika saya meninggalkan kunci sepenuhnya, ia berfungsi (kerana IFNULL mengembalikan Null dan ditetapkan kepada FALSE). </p> <p>Apa yang berlaku? Semua tugasan kod lain daripada JSON berfungsi dengan baik (INT, Teks, SMALLINT, dll.) - formatnya adalah sama. Dan saya pasti kod ini akan berfungsi beberapa bulan yang lalu (menggunakan 8.0.24). </p> <p>Saya pun mencuba: </p> <pre class="brush:php;toolbar:false;">IFNULL(IF(JSON_EXTRACT(@test1, '$.array_only') ADALAH BENAR, BENAR, SALAH), SALAH)</pre> <p>Ralat yang sama. </p> <p>Jadi, bagaimanakah saya boleh menukar nilai BOOL JSON benar/salah kepada nilai MySQL BOOL dalam 8.0.27? </p>
P粉707235568
P粉707235568

membalas semua(1)
P粉541796322

BOOLEAN bukan jenis data terbina dalam dalam MySQL. Ia adalah alias dan dilaksanakan sebagai TINYINT(1).

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


Gunakan penukaran jenis data tersirat:

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

Gagal jika nilai yang sepadan adalah daripada jenis rentetan atau null.

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

PS. Bentuk pendek DEFAULT IFNULL(0 + in_parameter->'$.array_only', FALSE); juga berguna.

PPS Sudah tentu, CAST() eksplisit juga boleh digunakan.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan