article search result of '데이터베이스' : 2

  1. 2007/10/31 php에서 원격mssql 접속
  2. 2007/10/01 MSSQL - datetime필드 복사하기

php에서 원격mssql 접속

이번 프로젝트를 하면서 기존 MSSQL의 데이터들을 mysql로 옴겨와야하는 상황이 생겼다ㅋ
그래서 이것 저것해보다 알게된것 몇자 적어보려.. ㅋㅋ

일단 php에서 원격의 mssql데이터를 받아오려면 freetds란것을 설치하여야 한다.
odbc 를 이용한 방법도 있고 다른거( 잘 모르는거라..;; )도 있지만


FREETDS를 쓰면 좋은점

1. 속도가 빠르다.

2. 윈도우쪽은 전혀 건들지 않아도 된다. (리퀘스트브로커 같은거 안깔아두 된다)

3. php 에서 top 이라든가 distinct 등의 구문이 먹지 않는데 freetds 는 아무 문제가 없다.

4. 예전엔 한글 지원이 되지 않았던 문제점이 있었으나, 그 문제 또한 해결되었다.

이런 이유로 FREETDS를 많이 쓴다고 합니다ㅋ

일단 설치법부터..

1. www.freetds.org 에서 최신 버전을 다운받는다.

freetds-0.63.tar

2. /usr/local/ 하단에 압축을 풀고 설치한다.

(전 /usr/local/freetds-0.63 의 디렉토리명을 /usr/local/freetds 로 변경했는데, 보기 쉽게 할려는 것이지 설치에 반드시 필요한 사항은 아닙니다.)

[code]# cd freetds

#./configure --with-tdsver=7.0 --enable-msdblib --enable-dbmfix --with-gnu-ld --enable-shared --enable-static

# make

# make install [/code]

3./usr/local/freetds/freetds.conf 에 연결할 ms-sql 에 대한 환경 설정을 확인한다.

[MyServer2k]

host = ntmachine.domain.com

port = 1433

tds version = 4.2

위 내용을 확인 후 host 정보를 변경합니다.

저같은 경우는 cms서버에 접속해야하기 떄문에

host = ***.***.***.**로 변경했습니다.

tds version = 4.2 로 되어 있는것을 꼭 확인하세요.

위 설치과정이 끝나면 php를 재컴파일해서 설치하여야 합니다ㅋ

아파치 설치할때 동적모듈로 설치했으면 php만 다시 컴파일하면 되지만 그렇지 않을떄는 흠.. 알아서ㅎㅎ

암튼 php를 재 컴파일 할때 옵션에

[code]
--with-sybase=/usr/local/freetds \
--with-mssql=/usr/local/freetds \
[/code]

위 옵션을 주면 php에서 mssql_connect 등을 슬수 있습니다.
(--with-sybase=/usr/local/freetds \ <-- 이건 필요없을수도...)

그리고 아파치 재시작후

[code]
$Conn = mssql_connect ( "MyServer2k", "username", "password");
mssql_select_db('db_name', $conn);
[/code]

위와 같이 연결하시면 됩니다.

주의 할것은 호스트이름을 freetds.conf 에서 지정한 이름으로 해야합니다.
위의 예에서는 "MyServer2k"가 되겠죠 ㅋ

그리고 한가지 더..
원격mssql에서 데이터를 받아오다 보면 특정필드의 크기가 커서 중간에 잘리는경우가 있습니다. 하루동안 삽질을 한 결과 ㅋ

이럴경우에는 php.ini파일을 열어서

[code]
; Valid range 0 - 2147483647. Default = 4096.
mssql.textlimit = 4096 //-> 이부분을 mssql.textlimit = 지정크기

; Valid range 0 - 2147483647. Default = 4096.
mssql.textsize = 4096 //-> 이부분을 mssql.textsize = 지정크기
[/code]
위와 같이 바꾸시면 해결됩니다.
2007/10/31 13:36 2007/10/31 13:36
깡후니
프로그래밍/PHP 2007/10/31 13:36

MSSQL - datetime필드 복사하기

asp 나 다른 어플리케이션에서 datetime 형식을 형변형 없이 select 하게 되면 '2007-10-01 오전 12:20:23' 같은 형태로 나옵니다.
이것을 datetime 으로 convert 할때 일반적인 convert 를 하게 되면 오류가 발생하게됩니다.

[code]
select convert(datetime,'2006-09-08 오전 12:20:23')

-----------------------

메시지 241, 수준 16, 상태 1, 줄 1

문자열을 datetime으로 변환하지 못했습니다.
[/code]

이는 SQLServer에서 지원하는 시간형식이 아니기 때문입니다.
다음과 같이 변형을 시켜주면 datetime으로 변형이 가능합니다.
또한 오전,오후의 정의는 오전 12시 와 오후 12시 어떤게 정오인가 하는 문제는 아래의 BOL에 정의를 따르면 됩니다.

[code]
declare @t varchar(50)

set @t = '2007-10-01 오전 12:20:23'

1.) select convert(datetime,stuff(@t,11,3,'') + case right(left(@t,13),2) when '오전'  then 'AM'  else 'PM'  end)

2.) insert test  into (datefield) values (CONVERT(datetime,stuff((@t,11,3,'') + case right(left((@t,13),2) when '오전'  then 'AM'  else 'PM'  end))
[/code]
2007/10/01 23:50 2007/10/01 23:50
깡후니
프로그래밍/Database 2007/10/01 23:50
Powerd by Textcube, designed by criuce
rss