<<Mysql에서 한글데이타가 있는 컬럼으로 정렬이 안될 때 조치방법>> 

1. 현상 
2. 확인방법 
3. 원인 
4. 조치방법 
5. 샘플 


-------------------------------------------------------------------------------- 

1. 현상 

- Mysql 사용중에 한글이 들어있는 컬럼(주로 회원명, 회사명 등)을 기준으로 
ORDER BY 구문을 이용했을 때, '가나다'순으로 정렬이 되지 않는 현상



2. 확인방법 

- 이러한 현상이 발생했을 경우에 DataBase에 접속하여 
SHOW VARIABLES LIKE 'character%'; 구문을 실행하여 봅니다. 
[참고] SHOW VARIABLES는 mysql 환경변수 상태를 보여줍니다

---------------------------------------------------------------------- 
| character_set | latin1 

| character_sets | latin1 big5 euc_kr greek .......... 
---------------------------------------------------------------------- 

이러한 검색결과를 볼 수 있습니다. 여기에서 character_set는 현재 설정된 
default-character-set입니다.(character_sets는 지원하는 문자셋입니다.) 

character_set 의 값이 euc_kr 이라면 이 데이타베이스는 한글정렬이 잘 
되는 상태입니다... [예]에서는 mysql의 기본설정인 latin1로 되어있고 
이때에는 한글정렬이 우리가 원하는 '가나다'순서대로 정렬되지 않습니다. 



3. 기본 문자셋 latin1을 사용할 때의 문제점 

- 한글테이블 명을 이용할 수 없습니다.(되더라도 안쓰는게 좋겠지만요) 
- 한글데이타가 들어있는 컬럼의 정렬이 이상하게 됩니다. 
(컬럼이 BINARY타입일 경우는 정상적으로 정렬됩니다.) 



4. 한글정렬이 되지 않을 경우에 조치하는 방법 

- 다음의 3가지 방법중의 하나를 이용해서 정렬이 가능하도록 할 수 있습니다. 

1) [서버 세팅 - Windows 계열] 
- mysql관리자가 작업해야하며, mysql 기동시 옵션으로 default-character-set=euc_kr 옵션을 추가해서 기동합니다
2) [서버 세팅 - Unix/Linux 계열] 
- mysql 환경설정파일에 default-character-set=euc_kr을 설정합니다
[Windows 계열] mysql의 my.ini 파일에 설정합니다. 
3) [테이블 세팅 - Alter Table 이용] 
- 처음에 테이블을 만들때 한글 컬럼에 BINARY옵션을 줘야합니다. 
- 만약, 이미 만들어진 테이블이고 정렬이 안된다면 ALTER TABLE해주십시오. 
구문) 
ALTER TABLE 테이블명 
CHANGE 이전컬럼명 새컬럼명 컬럼타입(사이즈) BINARY [옵션] 

예) 
ALTER TABLE CustInfo 
CHANGE KoreanNm KoreanNm varchar (8) BINARY not null [기타옵션] 



5. 예제 (ALTER TABLE 방식) 

1) 테이블 생성 
CREATE TABLE Info ( 
RegNo int(8) NOT NULL, 
KoreanNm varchar(8) 



2) 테스트용 데이타 입력 
INSERT INTO Info VALUES(0, '홍길동'); 
INSERT INTO Info VALUES(1, '신사임당'); 
INSERT INTO Info VALUES(2, '임꺽정'); 
INSERT INTO Info VALUES(3, '홍인영'); 
INSERT INTO Info VALUES(4, '김유신'); 
INSERT INTO Info VALUES(5, '황희'); 
INSERT INTO Info VALUES(6, 'ABC'); 

3) 정렬이 되었는지 검색 

SELECT KoreanNm FROM Info ORDER BY KoreanNm ASC; 

+----------+ 
| KoreanNm | 
+----------+ 
| ABC | 
| 임꺽정 | 
| 홍인영 | 
| 홍길동 | 
| 황희 | 
| 김유신 | 
| 신사임당 | 
+----------+ 
>> 한글로 정렬이 되지 않았습니다. 

4) Alter Table 하기 
>> KoreanNm컬럼을 BINARY로 설정합니다. 

ALTER TABLE Info CHANGE KoreanNm KoreanNm varchar (8) BINARY NOT NULL; 

5) 정렬이 되어있는지 검색 

SELECT KoreanNm FROM Info ORDER BY KoreanNm ASC; 

+----------+ 
| KoreanNm | 
+----------+ 
| ABC | 
| 김유신 | 
| 임꺽정 | 
| 홍길동 | 
| 홍인영 | 
| 홍홍홍 | 
| 황희 | 
+----------+ 

6) 정렬이 잘되었습니다.