Tidak dapat menetapkan pembolehubah BOOL MySQL kepada nilai BOOL JSON?
P粉707235568
2023-09-03 10:57:44
<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>
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:
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.