MSSQL*

MSsql에서 MySQL로 변환하기

회사원Z 2008. 7. 17. 13:58
1. 준비사항

MySQL5 설치, 포트는 우선 3306으로 하고 나중에 변경요.

MyODBC3.5 설치

MYOLEDB3 설치 후 한글 패치

MsSQL2MySQL 다운 설치(http://www.kofler.cc/mysql/mssql2mysql.html)





2. 데이타 전송하기 전에



=> my.ini 파일을 아래와 같이 설정하고 서버 재시작

아래 mysqld 옵션을 설정하지 않으면 데이타 전송시 한글과 특수문자를 쓸때 에러 발생

[client]

port=3306



[mysql]

default-character-set=euckr



[mysqldump]

default-character-set=euckr



[mysqld]

init_connect="SET collation_connection = euckr_korean_ci"

init_connect="SET NAMES euckr"

default-character-set=euckr

character-set-server=euckr

collation-server=euckr_korean_ci



=> Ms-SQL에서 자동증가 상수를 사용하였다면 해당 컬럼에 인덱스 추가해야 My-SQL에서 인식함.





3. 데이타 전송



MsSQL2MySQL 실행하고 연결 설정한 후 데이타 전송(포트가 3306이 아니면 에러남)

root 계정이 아닌 일반 계정으로 설정하여야 전송이 잘 되는 것 같습니다. (root 계정은 utf8 을 사용 추정)

방화벽은 없는지 접속자 위치는 맞는지 확인하세요. 안되면 오디비시도 설정하시구요.





4. MySQL에 사용자 추가하고 권한주고 웹에서 접속



Set DbCon=server.createobject("adodb.connection")

dbcon.open "provider=mysqlprov;location=localhost;data source=디비이름;intergrated security='';user id=아이

디;password=비번;port=포트;"



위에 설정이 안되는 경우가 있음(나도 지금 안됨 ㅡ.ㅜ) 아래 소스를 사용함.



Set dbcon=server.createobject("adodb.connection")

dbcon.open "DRIVER={MySQL ODBC 3.51 Driver}; SERVER=localhost; DATABASE=디비이름; user id=아이디;

password=비번; OPTION=35;port=포트;"





5. ASP 파일에서 변경해 줘야할 DB 관련 함수와 파라미터



1) TOP는 LIMIT으로 교체.

예) SELECT TOP 1 FROM board WHERE uid = 1

-> SELECT * FROM board WHERE uid = 1 LIMIT 1



2) @@IDENTITY는 작동하지 않음. LAST_INSERT_ID()로 수정.

예) SELECT @@IDENTITY

-> SELECT LAST_INSERT_ID()



3) MSSQL에서는 GROUP BY에 SELECT 뒤에 나오는 컬럼을 다 적어주어야 함.



4) GETDATE()는 NOW()(날짜와 시간)나 curdate()(날짜만)로 바꾼다.

Ms-SQL에서 날짜 형식에 빈칸을 넣으면 1900-01-01이 들어가는데 MySQL에서는 에러난다.

"1900-01-01 00:00:00" 이나 "1900-01-01" 날짜형식 삽입



5) DATEDIFF()

mysql - DateDiff( date(컬럼명이나 날짜) ,'"& date &"') = 0

mssql - DATEDIFF(day, date, GETDATE()) = 0



6) string + string 은 CONCAT 을 하면 된다.

예) SELECT str('가'+'나') as title FROM board

-> SELECT CONCAT('가'.'나') AS title FROM board



7) ROUND([숫자], [자릿수]).



8) LIKE 문에서는 '['가 있는지 확인하여야 함.



9) UNION 을 쓸 때 MYSQL에서는 SELECT를 ()로 꼭 감싸주어야 한다.



10) 게시판 수정 작업

Result.PageCount 와 Result.RecordCount 가 제일 문제인데 이것을 계산하여 해당 변수에 넣어주면 됩니다.

AbsolutePage 는 빼도 되는거 같구요.



if Request("page")="" then  '넘겨받는 변수는 페이지 값만

page=1 

startpage=1

else

page=cint(Request("page"))

startpage=int(page/setsize)



if startpage=(page/setsize) then

startpage=page-setsize + 1

else

startpage=int(page/setsize)*setsize + 1

end if

end if



stpage = int((page - 1) * pgsize) '각 페이지에 맞게 잘라올 시작값



sql = "Select count(*) From tbname '

Set RsCount = Dbcon.Execute (sql)



trcount = cint(RsCount(0)) 'Result.RecordCount



IF trcount mod pgsize = 0 THEN

   pgcount = trcount / pgsize 'Result.PageCount

ELSE

   pgcount = (trcount / 10) + 1

END IF



sql="SELECT * FROM tbname ORDER BY ref DESC limit " & stpage & "," & pgsize

Set result = Dbcon.Execute (sql)



select mref = Max(ref) from 테이블 => select Max(ref) as mref from 테이블



select count(*) from 테이블

여기서 반환값이 상수형이 아닌 문자형으로 나와서 Rs(0) > 0 이렇게 비교하면 에러나는 것 같음.

IF cint(Rs(0)) > 0 THEN 이렇게 쓰세요.



Ms-SQL을 5년가까이 써왔는데 지금 집에 허접한 작업 피시에서 검색하는데도 처리 속도가 서버보다 더 빠

른 것 같네요. MySQL이 불안하고 기능이 제한되어 있었는데 5버젼에서 많은 기능이 추가되니 이제 궂이 M$-

SQL 쓰지 마시고 MySQL 쓰시기 바랍니다.


출처: http://www.taeyo.pe.kr/threadboard/Content.asp?table=Board_Asp&seqs=123713&page=1&IsSearch=true