반응형
반응형
반응형

jdbc 를 이용한 mysql 접속 시 캐릭터셋 설정 방법.


jdbc:mysql://host/dbname?characterEncoding=utf8&characterSetResult=utf8

반응형

'Database > Mysql' 카테고리의 다른 글

[php] db 사용량 구하기.  (1) 2012.12.13
외래키 설정 방법.  (0) 2012.04.10
port 지정하여 접속하기.  (0) 2012.02.09
캐릭터셋 환경 변수  (3) 2010.12.01
[Link] Managing Hierarchical Data in MySQL  (0) 2010.11.09
반응형
select * from nls_database_parameters where parameter like '%CHARACTER%';
OR
select * from v$nls_parameters where parameter like '%CHARACTER%';
NLS_CHARACTERSET 확인.

한글 byte 수 확인.
select lengthb('아') from dual;


KO16KSC5601 : 한글 2byte

한글 완성형 코드와 일치.
2350자의 한글을 25*94 매트릭스에 배열한 문자셋.
4888자의 한자와 히라카나, 카타카나, 그리고 영문 및 각종 기호들을 포함.
유닉스 환경에서는 LANG=ko로 하여 DBCA(Database Configuration Assistant)를 실행할 경우, 자동으로 캐릭터셋을 KO16KSC5601로 지정
아햏햏, 먄하다, 솔믜, 커피숖, 똠방각하 등의 문자는 입력이 제대로 안됨.


KO16MSWIN949 : 한글 2byte

마이크로소프트사의 Windows Codepage 949번, 즉 한글 코드 페이지를 따른 코드셋.
이는 완성형(KO16KSC5601)을 그대로 포함하고 있으며, 추가로 현대 한글 조합으로 표현할 수 있는 모든 가짓수에 해당하는 8822자의 한글을 추가해 포함하고 있다. 그러니까 "Windows-949 캐릭터셋은 KSC5601의 수퍼셋(Superset)"이 되며, 따라서 "KO16MSWIN949 또한 KO16KSC5601의 수퍼셋"이 된다.

"다른 운영 체제에서도 사용할 수 있다!"
운영 체제가 Windows 949 코드 페이지를 지원하지 않는다고 해서, KO16MSWIN949 캐릭터셋을 가진 데이터베이스 인스턴스를 생성할 수 없다는 것은 아니다. 데이터베이스 캐릭터셋과 운영체제의 캐릭터셋은 전혀 별개라고 인식해야 한다. 비록 Windows-949는 특정 업체의 문자셋이기는 하지만, 이를 기반으로 한 KO16MSWIN949 캐릭터셋은 한글 2350자의 한계를 가진 KO16KSC5601의 대안으로 용이하게 이용될 수 있다. 기억하자.
Unix에서든 Linux에서든, KO16MSWIN949 캐릭터셋을 가진 데이터베이스 인스턴스를 생성할 수 있다. 


UTF8/AL32UTF8 : 한글 3byte

UTF8은 유니코드를 구현한 캐릭터셋 중에 가변길이 인코딩 방식을 택하고 있는 캐릭터셋이다.
한 글자를 표현하는데 필요한 바이트의 길이가 최대 3바이트(AL32UTF8의 경우 6바이트)까지 늘어날 수 있다.

유니코드는 현대 한글 11172자를 모두 가나다 순으로 잘 정렬된 상태로 포함하고 있다.
그래도 한글 한 자가 3바이트의 물리적 공간을 차지하므로, 오로지 모든 한글을 지원한다는 이유만으로 사용하는 것은 곤란하다. 하지만, 한글 이외에도 다른 언어들을 함께 데이터베이스에 저장해야 한다면 다른 선택의 여지가 없는 유일한 선택이 된다.


National Characterset

네셔널 캐릭터셋은 유니코드를 지원하지 않는 캐릭터셋을 가진 데이터베이스에서 유니코드를 지원하기 위해 부가적으로 설정할 수 있는 캐릭터셋이다. 즉, 하나의 데이터베이스 인스턴스는 "캐릭터셋"과 "네셔널 캐릭터셋"을 가진다. 처음 시스템 구축 당시와는 달리, 한글 이외의 다른 언어를 급히 저장해야 할 필요성이 있는 경우 네셔널 캐릭터셋을 적절히 활용할 수 있다.

네셔널 캐릭터셋을 가능한 캐릭터셋은 단 두 가지이다. UTF8과 AL16UTF16(기본값).
네셔널 캐릭터셋을 사용하기 위해서는 특정 타입으로 테이블의 컬럼 또는 PL/SQL 변수를 선언해야 한다. CHAR와 VARCHAR2,CLOB에 대응되는 네셔널 캐릭터셋 기반의 타입으로는 NCHAR, NVARCHAR2,NCLOB이 있다.

즉, KO16MSWIN949 데이터베이스에서 다음과 같이 테이블을 생성할 경우,

CREATE TABLE test_table
( varchar_value VARCHAR2(2000),
nvarchar_value NVARCHAR2(2000)
);
"varchar_value" 컬럼에는 KO16MSWIN949에 속하는 글자들만 저장할 수 있는 반면, nvarchar_value 컬럼에는 유니코드에 속한 모든 글자들을 저장할 수 있다.


캐릭터셋 선택의 원칙
한글 지원을 위해서는 반드시 위의 네 가지 캐릭터셋 중에 하나를 선택해야 한다

한국에서만 사용하는 시스템이라면 KO16MSWIN949를 선택한다
한국어 뿐 아니라 중국어, 일본어, 러시아어 등 다양한 언어로 된 데이터를 저장해야 한다면 UTF8, AL32UTF8을 선택한다. 인코딩 변환으로 한국어 기반의 캐릭터셋에 비해 속도의 저하가 있다고 알려져 있다.
대부분이 한글이며, 일부 외국어가 필요하다면, 한국어 기반의 캐릭터셋(KO16MSWIN949)을 사용하되, National Characterset을 이용한 컬럼에 외국어를 저장한다.


NLS_LANG 변수 값 설정
한글을 지원하는 데이터베이스와 통신한다면 반드시 NLS_LANG값을 설정해야 한다.
 NLS_LANG=[언어]_[영역].[캐릭터 셋]

Windows 운영체제에서 한국어 환경을 사용하는 사용자들은 다음과 같이 NLS_LANG 값을 설정할 수 있다.
KOREAN_KOREA.KO16MSWIN949

유닉스 운영체제에서 한국어를 입출력한다면 다음과 같이 NLS_LANG을 설정할 수 있다.
KOREAN_KOREA.KO16KSC5601


참조 Link : http://dba.pe.kr/1524
반응형

'Database > Oracle' 카테고리의 다른 글

NLS 파라미터 확인  (0) 2020.11.17
JDBC 오류?? varchar 에 2000byte 이상 insert 하기.  (0) 2011.11.07
오라클 구동 방법  (0) 2011.01.05
[Link] hierarchy query  (0) 2010.11.09
[오라클] 버전 확인.  (0) 2009.08.31
반응형

데이터베이스 환경 설정.
 - show variables like 'char%';

테이블 환경 설정.(Collation 확인)
 - show table status from [데이터베이스 명] like '[테이블명]%';


환경 변수 설명.
character_set_client
 - 클라이언트로부터 전달되는 명령문용 문자 셋.
 - 클라이언트에서 문장이 떠날 때 해당 문장은 어떤 문자셋으로 이루어져있는가의 문제.

character_set_connection
 - 클라이언트에서 넘어온 문장을 서버에서는 어떤 문자셋을 기준으로 해석해야하는가의 문제.
 - 문자 셋 인트로듀서 (introducer)를 갖고 있지 않는 리터럴 (literal) 및 숫자-문자 (number-to-string) 변환을 위해 사용되는 문자 셋.
모든 문자 스트링 리터럴은 문자 셋과 콜레션을 가지고 있다.
문자 스트링 리터럴은 하나의 문자 셋 인트로듀서 (introducer)와 COLLATE 구문을 옵션으로 가질 수도 있다:
[_charset_name]'string' [COLLATE collation_name]

예문:
SELECT 'string';
SELECT _latin1'string';
SELECT _latin1'string' COLLATE latin1_danish_ci;
간단한 명령문 SELECT 'string'의 경우, 스트링은 character_set_connection 과 collation_connection 시스템 변수가 정의하는 문자 셋과 콜레션을 갖는다.
_charset_name 수식은 일반적으로 인트로듀서 (introducer)라고 불린다. 이것은 파서 (parser)에게 “뒤에 따라오는 스트링은 문자 셋 X를 사용한다”라고 전달한다. 과거에는 이로 인해 사용자들이 혼란이 있었기 때문에, 인트로듀서는 어떠한 변환 (conversion)도 일으키지 않는다는 점을 강조한다; 엄밀히 말한다면, 이것은 스트링 값을 변경하지 않는 신호 (signal)이다. 또한, 인트로듀서는 표준 헥스 리터럴 (hex literal)과 헥스 리터럴 표기법 (x'literal' 및 0xnnnn) 보다 앞선 규칙이다.

character_set_database
 - 디폴트 데이터 베이스가 사용하는 문자 셋. 서버는 디폴트 데이터 베이스가 변할 때 마다 이 변수를 설정한다.
   디폴트 데이터 베이스가 없다면, 이 변수는 character_set_server와 같은 값을 가지게 된다.

character_set_filesystem
 - 파일 시스템 문자 셋.
   이 변수는 LOAD DATA INFILE 과 SELECT ... INTO OUTFILE 명령문 그리고 LOAD_FILE() 함수와 같은 파일 이름을 참조하는 스트링 리터럴을 해석하는데 사용된다.
   이러한 파일 이름은 파일을 오픈 하려는 시도가 있기 전에 character_set_client에서 character_set_filesystem으로 변환된다. 디폴트 값은 binary인데, 이것은 이무런 변환이 없다는 것을 의미한다. 멀티 바이트 파일 이름을 사용할 수 있는 시스템에서는 서로 다른 값을 사용하도록 한다. 예를 들면, 시스템이 UTF-8를 사용해서 파일 이름을 표시한다면, character_set_filesytem을 'utf8'로 설정한다. 이 변수는 MySQL 5.1.6에서 추가 되었다.

character_set_results
 - 쿼리 결과를 클라이언트에 리턴하기 위해 사용되는 문자 셋.
 - 서버에서 클라이언트로 응답을 넘겨줄때 어떤 문자셋으로 넘겨야하는가의 문제.

character_set_server
 - 서버의 디폴트 문자 셋

character_set_system
 - T 식별자 (identifier)를 저장하기 위해 서버가 사용하는 문자 셋. 그 값은 항상 utf8이 된다.

character_sets_dir
 - 문자 셋이 설치되어 있는 디렉토리.



문자 셋이란....
문자 셋이란 심볼과 인코딩 (encoding)을 의미한다. 콜레션은 하나의 문자 셋에 있는 문자들을 비교하기 위한 규칙 셋을 의미한다. 가상의 문자 셋을 사용해서 설명을 보다 명확히 하도록 하자.
 
4개의 문자를 사용하는 알파벳이 있다고 가정하자: ‘A’, ‘B’, ‘a’, ‘b’. 각각의 문자에 숫자를 하나씩 부여한다: ‘A’ = 0, ‘B’ = 1, ‘a’ = 2, ‘b’ = 3. 문자 ‘A’는 심볼이고, 숫자 0 은 ‘A’에 대한 인코딩이며, 네 개의 문자를 각각의 인코딩과 결합한 것이 문자 셋이 되는 것이다.
 
두 개의 스트링 값을 비교하는 경우를 가정하자: ‘A’ 와 ‘B’. 가장 간단하게 비교하는 방법은 각 문자의 인코딩을 살펴 보는 것이다: ‘A’의 0 과 ‘B’의 1. 0 이 1보다 작기 때문에, ‘A’가 ‘B’보다 작다고 말할 수 있다. 이와 같은 방법이 문자 셋에 대해서 콜레션을 적용한 것이다. 콜레션은 규칙 셋이다 (이와 같은 경우에는 한 가지 규칙만 있음): “인코딩을 비교한다.” 위와 같이 콜레션 방법 중에 가장 간단한 방법을 우리는 바이너리 콜레션이라고 부른다.

반응형

+ Recent posts