2013년 9월 30일 월요일

[MySQL]SNS의 시간/날짜 표현 방법

몇 분 전, 몇 시간 전, 몇 일 전 등의 표현은 아래처럼..

SELECT
      CASE
        WHEN NOW() < DATE_ADD(regDate, INTERVAL 1 HOUR)  THEN CONCAT(TIMESTAMPDIFF(MINUTE, regDate, NOW()), '분 전')
        WHEN NOW() < DATE_ADD(regDate, INTERVAL 24 HOUR) THEN CONCAT(TIMESTAMPDIFF(HOUR, regDate, NOW()), '시간 전')
        WHEN NOW() < DATE_ADD(regDate, INTERVAL 7 DAY)  THEN CONCAT(CONCAT(TIMESTAMPDIFF(DAY, regDate, NOW()), '일 전 '), DATE_FORMAT(GET_PARALLAX(regDate, 9), '%l:%i %p'))
        ELSE DATE_FORMAT(GET_PARALLAX(regDate, parallax), '%c월 %e일 %l:%i')
      END


당연히 regDate는 DATETIME형식의 컬럼이어야 함.
GET_PARALLAX는 시차(표준시간대)관련 커스텀 펑션이므로 여기서는 제외하여야 함..

2013년 9월 23일 월요일

아마존 RDS 이용 시 function 생성 오류날 때

아마존의 RDS 이용 시 function을 생성하려고 하면 오류가 발생한다.

mysql> show global variables like 'log_bin_trust_function_creators';

위 처럼 확인해보면, OFF 로 되어있는데.. 이것을 아래처럼 수정하면 ON 으로 바뀐다.
그런데 아마존 RDS에서는 super 권한문제로 변경되지 않는다.

mysql> SET GLOBAL log_bin_trust_function_creators = 1;

/* 권한문제로 안될때는 파라미터그룹 log_bin_trust_function_creators 수정 */

이럴때는 Parameter Groups 에서 log_bin_trust_function_creators  항목을 찾아 값을 1로 세팅해주면 된다.

참고로, RDS 에서 UTF-8을 사용하는 방법또한, 파라미터 그룹을 수정하면 된다.

   character_set_client = utf8
   character_set_connection = utf8
   character_set_database = utf8
   character_set_filesystem = utf8
   character_set_results = utf8
   character_set_server = utf8
   collation_connection = utf8_general_ci

이렇게 한 후, 각 데이터베이스 및 테이블, Function 생성 시 캐릭터셋을 UTF8로 지정하면 된다.