안녕하세요, 이번에 MS-SQL 서버 Character Set 변경에 따른 영향도 파악을 해야되서 질문드립니다.
SQL Server 2008에 대해서 Character Set에 대한 지식을 명확하게 아는 사람이 없어서 문의 드립니다.
제가 찾아본 지식으로는 SQL Server를 설치할때 Korean_Wansung_CI_AS 로 Collation 에 대한 세팅을 해주고,
Character Set에 대한 세팅은 별도로 하지 않는 것으로 파악이 되었습니다.
Infra쪽에 문의를 하니 MS-SQL을 Character Set이 별도로 존재하지 않는다 라고 답변이 왔는데,
구글링을 해서 SELECT CHARACTER_SET_NAME, COLLATION_NAME FROM information_schema.columns
위 SQL을 실행하니, Result Set이 cp949, Korean_Wansung_CI_AS 로 나오더라구요...
컬럼 별로 Character Set이 있는 것 같긴한데, 잘 이해도 안되고, 변경을 해도 되는지 안돼는지도 잘 파악이 되지가 않네요,
회사에서는 KO16MSWIN949, 혹은 UTF-8 로 일괄 변경을 할 예정이라고 하는데, MS-SQL이 UTF-8은 지원을 안하는 것 같고,
KO16tMSWIN949는 MS949인것 같은데.. 구글링 해도 정확하게 파악하기가 쉽지가 않네요..
1. SQL Server는 어떻게 Character Set 관리가 되는지
- 제가 찾아본 결과로는 위 SQL로 실행해 보니 Column별로 Character Set이 존재하는 듯 합니다.
Collation과 Character Set간의 관계 혹은 Sql Server Character Set에 전체적인 관리에 대해 아시는대로 답변 해주시면 감사하겠습니다. 또한 위 SQL로 Character Set을 파악하였는데 제가 분석한 정보가 맞는지 알려주시면 감사하겠습니다.
2. Charater Set 변경 및 영향도 문의
- Character Set 변경이 가능한지 : Character Set 이 SQL Server에서 변경하는 경우가 흔하진 않은것 같습니다, MS-SQL 자체에서 Character Set을 변경 가능한지 조차 모르겠습니다. 혹시 가능여부를 알고 계시면 조언해 주시면 감사하겠습니다.
- UTF-8과 KO16MSWIN949 지원가능여부 : 구글링해본 결과 UTF-8은 SQL Server에서 지원하지 않고 UCS-2 만 지원하는듯 보이고, KO16MSWIN949는 정보를 찾을 수가 없습니다. 혹시 해당 Character Set이 지원 가능한지 여쭤봅니다.
- Character Set 변경시 한글이 깨질 수가 있는지 : Character Set 변경시 이미 저장된 Data가 변경할 Character Set에서 지원하지 않을 경우 문제가 당연히 생길 수 있다고 생각합니다만, 혹시 경험이 있으신분은 조언해주시면 감사하겠습니다.
- 한글 Size 관련 : 일반적인 Oracle의 경우에는 UTF-8 등의 Character Set으로 변경할경우 한글 1글자에 대한 Byte가 2->3으로 증가하기때문에, 정적배열을 사용하는 C언어의 경우에는 Size가 바뀌기 때문에 Source 수정이 필요합니다. 혹시 경험 있으신 분들은 조언을 해주시면 감사하겠습니다.
1. MS SQL 에서는 Collate로 character set을 조정 하실 수 있습니다.
( http://msdn.microsoft.com/en-us/library/ms143508(SQL.90).aspx )
2. MS SQL 에도 collate를 설정 할 수 있습니다. Database와 테이블의 컬럼별로 설정 가능 합니다.(ALTER DATABASE, ALTER TALBE의 collate를 찾아보시면 됩니다.)
문제가 데이터가 있는 경우 여러가지 변수가 존재합니다.
(PK, FK, Check, Computed Column등 이 존재하는 경우 삭제 후 재생성해야 되는 문제 등이 있습니다.)
KO16MSWIN949은 찾아보니 CP949와 같은 것 같습니다.
char-set이 달라지면 저장하는 방식이 달라지므로 의미가 틀려지며 출력시 다른 의미로 나옵니다.(데이터는 같아도 의미가 틀려집니다.)
Win32를 사용한다면 MSSQL에서 받은 데이터를 변환해서 리턴해주는 코드를 작성해 주셔야 합니다.
Win32에서는 Multibyte, Unicode, utf-8의 변환 함수를 제공하고 있습니다.