FreeTDS를 이용해서 MS SQL Server 연결시 날짜 포맷 지정하기
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';
}
관련 글
-
0 likes
- 3213 views