MySQL과 큐브리드는 생각보다 많이 비슷하고도 많이 다르다.
이번에 MySQL로 쓰고있던 것을 큐브리드로 갈아타는 작업이 생겼는데,
작업을 하며 검색했던 차이점을 나중에 또 찾는 수고스러운 작업을 피하기 위해 여기에 메모해둔다.
아직은 찾은 종류가 많진 않은데 작업하면서 계속 추가할 예정이다.
1. MySQL에서 형변환 시
CAST(TEMP_COL AS CHAR) 에서 CAST(TEMP_COL AS CHAR(2)) 으로 변경했다.
CHAR에 범위가 들어가 있지 않아서 에러가 난듯했다.
* 근데 SELECT CAST('F' AS CHAR) FROM DB_ROOT; 를 하면 에러는 안나는데...
여하튼 CHAR에서 CHAR(범위)로 바꾼뒤 쿼리는 정삭적으로 실행되었다.
2. 예약어 쓰기
MySQL에서는 YEAR, MONTH, DAY를 쌍따옴표를 쓰지 않고도 알리아스로 쓸 수 있다.
하지만 큐브리드에서는 예약어를 쓸때 꼭 쌍따옴표로 감싸줘야 한다.
MySQL : SELECT '2016' AS YEAR FROM DUAL;
cubrid : SELECT '2016' AS "YEAR" FROM DB_ROOT;
* 물론 예약어는 되도록 쓰지않는것이 좋을것 같다.
3. SYSDATE 사용
MySQL에서는 현재날짜를 사용할때 NOW() 또는 SYSDATE()를 이용한다.
큐브리드에서는 각각 NOW()와 SYSDATE로 써야한다.
MySQL : SELECT SYSDATE(), NOW() FROM DUAL;
cubrid : SELECT SYSDATE, NOW() FROM DB_ROOT;
4. REPLACE사용
MySQL에서는 REPLACE함수를 사용할때 인자를 홑따옴표로 감싸도 되고 쌍따옴표로 감싸도 된다.
SELECT REPLACE('2016-09-07','-','') FROM DUAL; -- OK
SELECT REPLACE("2016-09-07","-","") FROM DUAL; -- OK
하지만 큐브리드에서는 홑따옴표로 감싸야만 한다.
SELECT REPLACE('2016-09-07','-','') FROM DB_ROOT; -- OK
SELECT REPLACE("2016-09-07","-","") FROM DB_ROOT; -- ERROR
5. 날짜연산
잘못된 구문이긴 한데 기존에 Mysql에서
SELECT DATE('2016-09-07')-DATE('2016-09-01') FROM DUAL;
같은 구문을 쓰고 있는게 있었다.
(두 날짜의 차이를 구하는 올바른 함수는 DATEDIFF(날짜1, 날짜2)이다.)
위의 구문을 돌리면 결과값으로 6이 나온다.
왜냐, 20160907이라는 숫자값에서 20160901이라는 숫자값을 빼기 때문이다.
SELECT DATE('2016-09-07')-DATE('2015-09-01') FROM DUAL;
위의 쿼리를 돌리면?
결과값으로 10006이 나온다. 20160907 - 20150901 로 계산하기 때문이다.
암튼, MqSQL에서는 이런식으로도 쿼리 실행이 가능한데 큐브리드에서는 안된다.
큐브리드에서 두 날짜의 차이를 비교하려면 DATEDIFF함수를 써야한다.
SELECT DATEDIFF(DATE('2016-09-07'),DATE('2016-09-01')) FROM DB_ROOT; -- OK
오늘 날짜랑 비교하려면
SELECT DATEDIFF(DATE(SYSDATE),DATE('2016-09-01')) FROM DB_ROOT; -- OK
이렇게 쓰면 된다.
6. MySQL의 varbinary에서 큐브리드의 BIT VARYING으로
간혹, MySQL에서 데이터 컬럼 중에 varbinary타입을 쓰는 경우가 있다.
이경우 큐브리드에서는 BIT VARYING타입을 써야하는데,
이때 where절에서 조회하는 방법이 바뀔 수 있다.
varbinary타입이 내가 많이 쓰는 쪽은 아니라서 맞는진 모르겠지만
기존에 구문이
SELECT COL1 FROM TEMP_TBL WHERE COL1 = '1'; -- (COL1이 varbinary타입일경우) ( 결과 : 31 )
위처럼 쓰여지고 있었다.
재미있는건 해당 컬럼에 insert를 할때 그 데이터가 hex(16진수)화 되어서 들어가는데 where절에서 조건을 1로 줘서 조회를 하면
결과는 1이 hex화된 31이 나온다.
이런 상황에서 큐브리드로 갈아타려면
insert할때는 들어가는 값을 hex함수로 감싸서 넣어주어야 하고
select할때는 where 절에서는 "CAST(OTHBC_YN AS VARCHAR) = hex('1')" 과 같이 varchar로 cast한 컬럼값과 hex화된 데이터 값을 비교하도록 변경하여야 한다.
입력 : INSERT INTO TEMP_TBL ( COL1 ) VALUES ( HEX('1') );
조회 : SELECT COL1 FROM TEMP_TBL WHERE CAST(COL1 AS VARCHAR) = hex('1')