MySQL의 BOOL 변수를 JSON의 BOOL 값으로 설정할 수 없습니까?
P粉707235568
2023-09-03 10:57:44
<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>
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()도 사용할 수 있습니다.