FreeTDS를 이용해서 MS SQL Server 연결시 날짜 포맷 지정하기

Submitted by river - 등록 10 years ago - 수정 10 years ago

linux 머신에서 Laravel 프레임웍을 이용해서 MS SQL Server에 접속할 때는 FreeTDS 라이브러리가 사용된다. 비록 이 환경이 바람직하다고 생각하지는 않지만, MS SQL Server를 사용하는 한 이 구성을 사용해야만 하는 경우가 종종 발생한다.

FreeTDS는 날짜 타입 컬럼을 출력할 때 Jan 1 2014... 형태를 기본으로 사용한다. 이 부분은 PDO의 날짜 포맷과 일치하지 않아서 문제가 생긴다. 이를 해결하기 위해서는 FreeTDS의 날짜 포맷 설정을 변경해햐 한다.

FreeTDS의 날짜 포맷은 /etc/freetds/locales.conf 파일을 통해서 설정할 수 있다. 다음 두줄을 locales.conf에 추가하면 PDO와 동일한 포맷으로 날짜가 출력된다. locales.conf 파일이 없으면 새로 만들면 된다.

[default]
date format = %Y-%m-%d %H:%M:%S.000

php-fpm을 사용하고 있다면 locales.conf의 변경 내용이 바로 반영되지 않고, php-fpm을 재시작해야 반영이 된다. ubuntu에서는 다음의 명령을 통해서 php-fpm을 재시작할 수 있다.

$ sudo service php5-fpm restart

참고로 날짜 포맷에서 밀리세컨드 부분에 .000이 들어간 이유는 SqlServerGrammar 클래스의 getDateFormat 메서드에서 반한하는 포맷을 가지고 Carbon 객체에서 파싱을 하기 때문이다.

illuminate\Database\Query\Grammars\SqlServerGrammar.php

/**
 * Get the format for database stored dates.
 *
 * @return string
 */
public function getDateFormat()
{
    return 'Y-m-d H:i:s.000';
}

관련 글

comments powered by Disqus