데이터베이스 개발자 질문과 답변 게시판

데이터베이스 개발/운영 관련 질문과 답변을 올리는 게시판입니다. 궁금하신 내용을 이곳에서 문의하시면 SQLER 분들의 답변을 받으실 수 있습니다. 문의를 하실때에는 최근 작업하신 특이 사항이나, 장애 발생 전 상황을 상세히 올려 주시면 답글을 적어주시는 SQLER분들의 답변이 더 정확할 수 있으니 도움 되시길 바랍니다. 쿼리 문의일 경우, 실제 문제가 재현되는 테이블생성, 샘플데이터 생성 쿼리를 함께 올려 주시면 더 빠르고 정확한 쿼리 문의 응답이 가능합니다.

웹 환경에서 Character Set 과 Database의 Collation은 정말 볼 수록 정리가 안되네요...

영문 서버 환경에서 한글 웹사이트를 넣다보니 당면하게된 문제로 시작해 끝이 보이질 않아요 ㅎㅎ


다행히 많은 분들의 도움으로 방법은 찾았지만... 왜 이런 방법으로 해결이 되는 것인지 이유는 파악하지 못했네요..


이와 관련해 여러 궁금증이 있지만 질문을 할 수 없을만큼 저도 정리가 안되서... 어떻게 정리하고 무엇을 질문해야 할지

몰라 그냥 이곳에 생각나고 추측한대로 써봅니다...

내용 정리가 되신 분들의 의견이나 조언을 구해 봅니다.


웹 환경에서...

우리는 브라우저를 통해 웹페이지를 접근했을 때 해당 웹페이지의 문자를 어떤 문자셋(Char Set)으로 해석하고 봐야할지에 대해

HTML Meta Tag인 CharSet 값으로 결정 하죠.. 맞나요? ㅎㅎ

그 값이 euc-kr인 경우 완성형 한글이구요...


그런데... 우리는 단순히 웹 페이지에 코딩되어 있는 HTML 코드와 정적인 문자로 나타나는 contents만 보는 것이 아니죠...

때론 DB에 저장된 데이터와 사용자의 Action에 따른 contents를 웹브라우저로 보게 됩니다.

여기에 asp나 php같은 대표적 서버사이드 스크립트 언어와 MS-SQL 및 MySQL 같은 Database가 사용되구요...


그래서... asp나 MS-SQL 단계에서도 Client와 Server 간의 데이터를 주고 받을 때 문자에 대한 문자셋을 결정해 주어야

하는 것이 맞나요?


그렇다면 ASP는 CodePage, Session.Codepage, response.charset 같은 것들이 있고...

MS-SQL은 collation ... 이것 밖에 모르겠네요...


여기서 의문점...

ASP에서 CodePage 값을 949로 해주면 HTML의 Meta Tag CharSet "euc-kr"과 같은 것인가요?

CodePage = 65001 은 CharSet "utf-8" 과 같은 것이구요?


맞다면... 일단 ASP단계와 HTML 단계에 대한 Character Set 설정은 맞춰 줄 수 있게 되었군요...

그럼 남은 문제는 DataBase...


사실 이 마지막 문제가 중요하고 가장 난해한데요...

MS-SQL에서 varchar/char/text 문자열 타입의 컬럼들은 collation 설정이 존재하잖아요...


collation = 데이터 정렬

이거 가만히 살펴보니... 그냥 정렬을 위한 기준으로 어떤 문자셋을 사용하라는 설정일 뿐

해당 컬럼에 데이터가 Insert 되거나 select 될 때 어떤 문자셋으로 저장 또는 출력 해줄지에 대한 설정은 아닌 듯 합니다.


말이 어려워졌는데요...

쉽게 말해 euc-kr(949) 문자셋 환경의 웹페이지에서 사용자가 문자를 입력하고 그 입력된 문자들을

DB에 저장할 때 (INSERT 할 때) 해당 문자들은 Database 서버에서 어떤 문자셋으로 받아들이고 어떤 문자셋으로 컬럼에

저장시키는지 모르겠다는 것입니다.

그리고 그 요소가 collation은 아니라는 것이죠... 왜냐하면 collation은 그냥 정렬에 대한 기준일 뿐이니까요...


이런 생각이 맞다면...

MS-SQL은 문자열 타입의 컬럼에 데이터가 저장될 때 그냥 웹에서 설정된 문자셋 (euc-kr, 949) 으로 DB에 저장 되는 것일까요?

아니면... OS 나 MS-SQL Server의 환경에 따르는 것일까요?

후자의 경우라면 그 내용은 어떻게 되는 것일까요?


반대로...

DB에 저장된 데이터가 웹페이지에 뿌려지는 과정에서

DB의 컬럼내용(문자들)은 어떤 문자셋으로 ASP로 보내지는 걸까요?

ASP는 CodePage 값으로 949값을 설정했으니 DB에서 넘어오는 컬럼의 내용들이 euc-kr(949) 문자셋으로 넘어오지

않으면 깨진 문자를 담겠죠? 해석이 안될 테니까요...


이번에 제가 격은 문제는 바로 이 부분이었습니다.

저는 한국에서 운영되던 euc-kr 문자셋 환경의 웹사이트를 해외 서버로 이전시켰고...

DB는 복원작업으로 처리하였습니다.


다른 것은 바뀐게 없고 단지 웹서버와 MS-SQL 서버의 환경이 영문으로 바뀌었다는 것 밖에는 없죠...

그런데 Database에서 불러온 모든 한글 문자는 ??? ?? 이와 같이 물음표로 표시되었습니다.


이 시점에서 저는 우선 기존에는 없었던 ASP의 PageCode 값을 첫 줄에 추가해 주었습니다.

그리고 Database의 테이블 하나를 선택해서 varchar 타입의 컬럼을 nvarchar 타입으로 바꿔 주었죠...


일단 ?? 물음표로 나오던 한글 문제는 해결 되었지만...

도대체 왜... ???? 이유를 모르겠습니다...


ASP 페이지에서 CodePage를 설정해 주어야 한다는 것은 대충 이해가 좀 되긴 합니다.

왜냐하면 DB에서 가져온 데이터를 어떤 문자셋으로 처리할 것인지 결정할 필요가 있을 테고 그런 의미에서

CodePage가 설정되어야 한다는 타당성이 있었죠... (하지만 이것도 왜 한글 서버에서는 없어도 되는지는 모르겠음)


그런데 Database의 컬럼에 대한 데이터 타입은 왜 nvarchar로 바꿔줘야 하느냐 입니다....

이 작업을 안해주고 그냥 varchar 타입 상태에서는 ??? 물음표 문제가 해결이 안되더라구요...


여기서 한가지 의문은..

과연 복원한 DB의 varchar / char / text 타입의 컬럼에 저장된 데이터들은 문자셋이 euc-kr(949)로 저장된 것들인가?

하는 의문인데요.. 아무래도... utf-8 방식으로 저장된 것이 아닐까 라는 추측입니다.

왜냐하면... euc-kr 문자셋으로 저장된 데이터라면... asp에서 불러왔을 때 문제가 없어야 정상 아닐까요?

분명 다른 문자셋으로 저장이 되었기 때문에... ASP에서 CodePage를 지정했음에도 불구 ??? 물음표 문제가 해소되지

않았던 것이라고 생각 합니다...


이 추측이 맞다면...

euc-kr(949) 문자셋으로 구성된 웹사이트에서 사용자가 문자를 입력하고 DB로 보낼 때....

그 저장되는 문자들은 대체 어떤 문자셋으로 저장이 되는 걸까요? ㅜㅜ... 

서버의 환경에 따라가는 걸까요? 아니면 ASP에서 Codepage를 지정했으니 그 값을 따라 가는 걸까요?...


지금까지의 내용만으로도 정말 정리가 안되죠? ㅎㅎ

확실하게 아는 내용이 없어서 이리 생각해보고 저리 생각해보며 궁금한 내용을 적다보니...

읽기 힘들게 되었네요...


이에 관련하여 의견 주신다면 많은 도움이 될 것 같아서... 조언을 기다려 봅니다...

긴 글 읽어 주셔서 감사합니다.

No. Subject Author Date Views
» 웹사이트의 CharSet 설정과 Database의 Collation ... 그 외 상관 관계... Larry 2013.07.31 8360
7050 쿼리문 질문 [6] 황영식_314681 2013.07.30 4461
7049 선배님들 프로시저(락 관련) 조언좀 부탁드립니다... [3] alima 2013.07.30 6400
7048 xml 데이터형의 컬럼을 select 하는데.. [3] 강승생 2013.07.30 4592
7047 해외 서버에 웹사이트를 이전 시켰는데 DB에서 불러온 한글만 깨져요.. [12] Larry 2013.07.26 10369
7046 asp로 ms-sql 2005의 타이틀 컬럼 앞 10자리만 수정시... [2] 다크나인 2013.07.26 6280
7045 SQL DB를 활용하여 회사 프로그램을 작성해야하는데요 MFC 와 C# [2] 씨쎔 2013.07.26 4532
7044 테이블안에 중복 아이디에 순번을 먹이고 싶습니다... [1] dcman 2013.07.25 5008
7043 cte를 이용 이중트리구조를 출력하려합니다. [1] gtm100 2013.07.25 5140
7042 MsDtsSrvr.exe 오류가 나네요 곰팡이 2013.07.25 7851
7041 SqlServer 2012 인스탄스 제거 질문드립니다. [2] 힘내라장코치 2013.07.25 4943
7040 mssql 7 desktop 버젼 구할 방법이 없을까요 ? [1] 어둠별빛 2013.07.24 4461
7039 쿼리 수정 설명 부탁드립니다. [2] rx프로그래머rx 2013.07.24 4485
7038 키워드 검색을 하는데, 다중 키워드를 and 조건으로 검색하는 경우 [4] 더따뜻한 2013.07.24 6883
7037 데이터의 날짜보다 빠른 모든 6개월 내의 데이터와 조인 질문 [1] 슈팅스타 2013.07.24 4693
7036 해외 호스팅 서버쪽에 SQL2005 서버로 이전 작업 문의드립니다. [2] Larry 2013.07.23 5213
7035 쿼리 고수님들께 문의좀 드립니다. ^^ [2] 남자나무 2013.07.23 5546
7034 mdf 파일 손상히 tail log 백업 방법 [2] Tommy Hilfi 2013.07.23 5499
7033 질문드립니다 [1] 잉잉 2013.07.23 4776
7032 그룹별 곱하기 [1] taz2315 2013.07.23 9075





XE Login