>  Q&A  >  본문

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일 전457

모든 응답(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
  • 취소회신하다