MySQL 5.7.8 VER 부터 JSON TYPE을 지원해준다. 

그래서 MySQL에서 JSON TYPE을 위한 많은 함수를 제공해준다.


MySQL에서는  JSON Functions의 레퍼런스를 상세히 제공해준다.


MySQL 5.7 : https://dev.mysql.com/doc/refman/5.7/en/json-functions.html
MySQL 8 : https://dev.mysql.com/doc/refman/8.0/en/json.html

아주 기본적인 예만 한번 해본다.

1.TEST라는 이름을 가진 테이블안에 아래와 같은 2개의 데이터가 들어가 있다.


2.  MySQL 레퍼런스에서 제공해주는 JSON_OBJECT라는 Function을 사용하면

아래와 같은 결과를 얻을 수 있다.



{
    "ID":  1,
     "NAME":  "TEST",
     "PASSWORD":  "1234",
     "PHONE_NUM":  "010-1111-1111"
}{
    "ID":  2,
     "NAME":  "HI",
     "PASSWORD":  "5555",
     "PHONE_NUM":  "010-2222-2222"
}



MySQL  Workbench 에서 프로시저에서 CUSOR 사용시 잘못 된 CUSOR이름을 사용하면 아래와 같은 에러가 발생한다.



Error 1324: Undefined CURSOR: CUR_TEST SQL Statement

이유는 혹시 CUSOR이름을 아래와 같은 형식으로 지을 경우 발생한다.



CUSOR_TEST 의 CUSOR라는 단어가 MYSQL WORKBENCH에서 예약어로 사용되기 때문인 듯 하다.

그러므로 CUR_TEST라는 형식이든 에러가 안나도록 바꾸면 된다.

MySQL  Workbench 에서 프로시저에서 DELIMITER 사용시 아래와 같은 에러가 발생한다.


 Syntax error: unexpected 'DELIMITER'




이유는 Workbench에서 프로시저 작성할 때 이미 DELIMITER를 눈에 보이진 않지만 자동으로 제공해주기 때문이다.

아래와 같이 다시 DELIMITER를 지우고 APPLY를 한번 눌러보면 DELIMITER가 자동으로 제공해주는 것을 볼 수 있다.



따라서 Workbench에서 DELIMITER를 선언할 필요가 없다.


쿼리 작업할 때 count라는 컬럼을 업데이트 해줘야 하는 일이 발생했는데 아래와 같이 하면 자꾸 에러가 발생하였다.

update Test set count=?1 where id=?2


오랜 삽질 끝에, 혹시나 count가 mysql에서 예약어로 사용되고 있어서 그런가 하는 생각에 아래와 같이 바꿔보니 성공하였다.
 

update Test t set t.count=?1 where t.id=?2


앞으로 컬럼의 이름과 MySQL의 예약어가 겹치는 게 있는지 주의하자.


MySQL 작업시

default CURRENT_TIMESTAMP 을 해놓아도 안될 때가 있다. (기본적으로 not null로 설정 안되어 있으면 먹지 않음)

위 작업할 때 not null은 기본적으로 설정 해 주어야 하는데, 갑자기 default 값이 먹지 않고 값이 not null 이여아 한다는 오류가 뜰때가 있다.

이 경우 MySQL 쿼리로


SET explicit_defaults_for_timestamp=0


을 날려주면 된다.


※ 특히 Amazon RDS 기본 값은 SET explicit_defaults_for_timestamp=1 이기 때문에 필히 RDS 관리 홈페이지에서 파라미터 그룹을 생성하면 된다.


※ MySQL 8.0 부터 deprecated 되어 안된다. 현재 자신이 사용하는 프로젝트(프로그램 및 언어)에서 만약 Date의 DataType이 String으로 되어있다면 DataType을 Date형식으로 바꾸어야 함.

+ Recent posts