2017년 10월 18일 수요일

MySQL ODBC connection string

사용언어 : C++
컴파일 : Visual Studio 2015
DB : mysql-installer-community-5.7.19.0.msi

회사에서 MS SQL 대신에 MY SQL로 대체해서 사용해야 한다는 통지를 받아서 기존 코어 라이브러리에 MY SQL connection string를 추가하는 작업을 진행

atldbcli.h
OpenFromInitializationString 을 통해서 처리하는 구조라 connection string만 맞추면 금방 될것으로 예상했는데 연결이 되지 않아 애를 먹음


참고사이트)
https://dev.mysql.com/doc/index-connectors.html
https://www.connectionstrings.com/mysql/


기존 코어에 있던 스트링은
Provider=OleMySql.MySqlSource.1; Data Source=127.0.0.1,3306; Initial Catalog=world; User Id=root; Password=1234
결과) GetDataSource 에러값 REGDB_E_CLASSNOTREG Class not registered

검색해 보니 Provider를 MySQLProv로 설정하라고 나와서 해보니 동일하게
REGDB_E_CLASSNOTREG Class not registered 에러가 남

그래서 더 찾아보니
Provider 대신 Driver={MySQL ODBC 5.3 UNICODE Driver}; 를 사용하는 곳이 있어서 수정해봄
결과는 GetDataSource 는 S_OK 하지만 Initialize에서 E_FAIL

여기서 부터 삽질이 시작됨
Driver를 MySQL ODBC 5.3 Driver, MySQL ODBC 5.3 ANSI Driver, MySQL ODBC 5.3 Unicode Driver 3개 다 해보고
User Id를 User로 바꿔보고 UID, PWD 등등 수정해보지만 모두 실패

>> 실패케이스
DRIVER={MySQL ODBC 5.3 Driver}; Data Source=127.0.0.1,3306; Initial Catalog=world; User Id=root; Password=1234; OPTION=3
결과) Initialize 에러값  E_UNEXPECTED Catastrophic failure.

Driver = { MySQL ODBC 5.3 UNICODE Driver }; Data Source=127.0.0.1,3306; Database=world; User=root; Password=1234; OPTION=3
결과) Initialize 에러값 DB_SEC_E_AUTH_FAILED Authentication failed.

Provider=MSDASQL; Driver = { MySQL ODBC 5.3 UNICODE Driver }; Server=127.0.0.1; Port=3306; Database=world; User=root; Password=1234; OPTION=3
결과) Initialize 에러값 E_FAIL

그러다 바탕화면에 텍스트파일을 새로 만들고 확장자를 udl로 바꾸고 실행하니

공급자에 Microsoft OLE DB Provider for ODBC Drivers를 선택하고
연결 문자열에 MySQL ODBC 5.3 Unicode Driver을 넣고 저장시켜보니
Provider=MSDASQL.1; Extended Properties="Driver={MySQL ODBC 5.3 Unicode Driver};";
이런식으로 저장이됨

그래서 스트링을 바꿔서 접속해 보니 정상적으로 접속이 되는것을 확인하게 됨
아싸!

결국 최종 스트링은 아래와 같이 이루어짐
Provider=MSDASQL.1; Extended Properties="Driver={MySQL ODBC 5.3 Unicode Driver};"; Server=127.0.0.1; Port=3306; Initial Catalog=world; User Id=root; Password=1234

참고로 Data Source를 사용하면 실패함 ㅠㅠ
Provider=MSDASQL.1; Extended Properties="Driver={MySQL ODBC 5.3 Unicode Driver};"; Data Source=127.0.0.1,3306; Initial Catalog=world; User Id=gameserver; Password=!QAZwsx
결과) Initialize 에러값 E_FAIL


이상 삽질의 결과 공유 끝.