일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
- 정부 서비스 가이드라인
- 자바스크립트
- selinux
- 우분투 npm 설치
- 날짜비교
- 301 리다이렉트
- 정규식
- 글자 수 제한
- 우분투
- .htaccess
- 배열
- JavaScript
- 애니메이트
- 날짜변환
- Vanilla JS
- ip직접접근차단
- SSL
- 디지털 정부서비스ui/ux
- Ajax
- 보안인증서
- 비동기호출
- 리사이즈
- virsualhost
- iframe
- 페이지전환효과
- 구글뷰어
- 글자수제한
- JS
- MySQL
- post_type
- Today
- Total
더 나은 프로그래머가 되자
한글 영문 정렬 본문
mysql에서는 영어와 숫자는 정렬이 잘되지만 한글이 정렬되려면 설정을 바꾸어야 한다.
mysql 설치시 문자셋을 euc_kr로 설정해야 한다. 만약 설정을 하지 않았다면 데몬 실행시에 문자셋을 euc_kr로 설정할수 있다. 하지만 그것도 안되었다면 아래의 명령으로 현재 mysql문자셋을 체크한다. 한글 문자셋이 아니라면 binary()함수로 한글을 정렬가능하다. 원래 목적은 영어의 대소문자를 구분하기 위해 사용한다.
mysql의 문자셋이 euc_kr이거나 데몬실행시 문자셋을 한글 문자셋으로 주었다면 binary()함수없이 한글 정렬이 가능하다.
3.28버전에서 문자셋 보기
show variables like 'character_set';
--현재 mysql에 설정된 문자셋 출력
show variables like 'character_sets';
--현재 mysql에서 지원하는 문자셋 출력
4.1버전에서 문자셋 보기
show variables like '%character_set%';
버전 3.23 에서 정렬 테스트
create table test1
(
a varchar(20)
);
insert into test1 values('lee');
insert into test1 values('sik');
insert into test1 values('이');
insert into test1 values('준');
insert into test1 values('김');
insert into test1 values('aaa');
insert into test1 values('99');
insert into test1 values('111');
select * from test1 order by a;
+------+
| a |
+------+
| 111 |
| 99 |
| aaa |
| 이 |
| 준 |
| lee |
| sik |
| 김 |
+------+
select * from test1 order by binary(a);
+------+
| a |
+------+
| 111 |
| 99 |
| aaa |
| lee |
| sik |
| 김 |
| 이 |
| 준 |
+------+
select a from test1 order by if(ASCII(SUBSTRING(a, 1)) < 128, 2, 1);
//정렬할 필드의 첫문자의 아스키 값을 받아 128 밑에 있는거는 큰수, 아닌건 작으수를 넣어
1차 정렬을 이값으로 합니다.
+------+
| a |
+------+
| 이 |
| 준 |
| 김 |
| lee |
| sik |
| aaa |
| 99 |
| 111 |
+------+
select a from test1 order by if(ASCII(SUBSTRING(a, 1)) < 128, 2, 1) , binary(a);
//위의 방법으로 정렬하게 되면 한글->숫자->영어 순으로 정렬하게 된다.
+------+
| a |
+------+
| 김 |
| 이 |
| 준 |
| 111 |
| 99 |
| aaa |
| lee |
| sik |
+------+
create table test2
(
a varchar(20) binary not null
);
insert into test2 values('lee');
insert into test2 values('sik');
insert into test2 values('이');
insert into test2 values('준');
insert into test2 values('김');
insert into test2 values('aaa');
insert into test2 values('99');
insert into test2 values('111');
select * from test2 order by a;
+-----+
| a |
+-----+
| 111 |
| 99 |
| aaa |
| lee |
| sik |
| 김 |
| 이 |
| 준 |
+-----+
select * from test2 order by binary(a);
+-----+
| a |
+-----+
| 111 |
| 99 |
| aaa |
| lee |
| sik |
| 김 |
| 이 |
| 준 |
+-----+
select a from test2 order by if(ASCII(SUBSTRING(a, 1)) < 128, 2, 1);
//정렬할 필드의 첫문자의 아스키 값을 받아 128 밑에 있는거는 큰수, 아닌건 작으수를 넣어1차 정렬을 이값으로 합니다.
+-----+
| a |
+-----+
| 이 |
| 준 |
| 김 |
| lee |
| sik |
| aaa |
| 99 |
| 111 |
+-----+
select a from test2 order by if(ASCII(SUBSTRING(a, 1)) < 128, 2, 1) , a;
//위의 방법으로 정렬하게 되면 한글->숫자->영어 순으로 정렬하게 된다.
+-----+
| a |
+-----+
| 김 |
| 이 |
| 준 |
| 111 |
| 99 |
| aaa |
| lee |
| sik |
+-----+
버전 4.1 에서 정렬 테스트
create table test1
(
a varchar(20)
);
insert into test1 values('lee');
insert into test1 values('sik');
insert into test1 values('이');
insert into test1 values('준');
insert into test1 values('김');
insert into test1 values('aaa');
insert into test1 values('99');
insert into test1 values('111');
select * from test1 order by a;
+------+
| a |
+------+
| 111 |
| 99 |
| aaa |
| 이 |
| 준 |
| lee |
| sik |
| 김 |
+------+
select * from test1 order by binary(a);
+------+
| a |
+------+
| 111 |
| 99 |
| aaa |
| lee |
| sik |
| 김 |
| 이 |
| 준 |
+------+
select a from test1 order by if(ASCII(SUBSTRING(a, 1)) < 128, 2, 1);
//정렬할 필드의 첫문자의 아스키 값을 받아 128 밑에 있는거는 큰수, 아닌건 작으수를 넣어
1차 정렬을 이값으로 합니다.
+------+
| a |
+------+
| 이 |
| 준 |
| 김 |
| lee |
| sik |
| aaa |
| 99 |
| 111 |
+------+
select a from test1 order by if(ASCII(SUBSTRING(a, 1)) < 128, 2, 1) , binary(a);
//위의 방법으로 정렬하게 되면 한글->숫자->영어 순으로 정렬하게 된다.
+------+
| a |
+------+
| 김 |
| 이 |
| 준 |
| 111 |
| 99 |
| aaa |
| lee |
| sik |
+------+
create table test2
(
a varchar(20) binary not null
);
insert into test2 values('lee');
insert into test2 values('sik');
insert into test2 values('이');
insert into test2 values('준');
insert into test2 values('김');
insert into test2 values('aaa');
insert into test2 values('99');
insert into test2 values('111');
select * from test2 order by a;
+-----+
| a |
+-----+
| 111 |
| 99 |
| aaa |
| lee |
| sik |
| 김 |
| 이 |
| 준 |
+-----+
select * from test2 order by binary(a);
+-----+
| a |
+-----+
| 111 |
| 99 |
| aaa |
| lee |
| sik |
| 김 |
| 이 |
| 준 |
+-----+
select a from test2 order by if(ASCII(SUBSTRING(a, 1)) < 128, 2, 1);
//정렬할 필드의 첫문자의 아스키 값을 받아 128 밑에 있는거는 큰수, 아닌건 작으수를 넣어
1차 정렬을 이값으로 합니다.
+-----+
| a |
+-----+
| 이 |
| 준 |
| 김 |
| lee |
| sik |
| aaa |
| 99 |
| 111 |
+-----+
select a from test2 order by if(ASCII(SUBSTRING(a, 1)) < 128, 2, 1) , a;
//위의 방법으로 정렬하게 되면 한글->숫자->영어 순으로 정렬하게 된다.
+-----+
| a |
+-----+
| 김 |
| 이 |
| 준 |
| 111 |
| 99 |
| aaa |
| lee |
| sik |
+-----+
출처 : http://www.zetswing.com/bbs/board.php?bo_table=MySQL_LEC&wr_id=33&page=2
'데이터베이스 > MYSQL' 카테고리의 다른 글
MySQL에러: Table 'xxx' is marked as crashed and should be repaired. 해결방안 (0) | 2016.03.21 |
---|---|
테이블 정의서 쿼리,테이블 명세서 쿼리 (0) | 2016.02.23 |
mysql 문자열 교체 replace 함수 사용 (0) | 2015.09.17 |
mysql auto_increment 자동증가값 초기화시키기 (0) | 2015.03.11 |
두개 테이블에서 count 와 join 을 동시에 하기 (0) | 2015.01.26 |